Search
lxdream.org :: lxdream/src/display.h
lxdream 0.9.1
released Jun 29
Download Now
filename src/display.h
changeset 451:50622730f226
prev429:e581b90c3fb3
next477:9a373f2ff009
author nkeynes
date Tue Oct 23 10:47:17 2007 +0000 (16 years ago)
permissions -rw-r--r--
last change Make controller config actually work
view annotate diff log raw
     1 /**
     2  * $Id: display.h,v 1.10 2007-10-21 05:15:56 nkeynes Exp $
     3  *
     4  * The PC side of the video support (responsible for actually displaying / 
     5  * rendering frames)
     6  *
     7  * Copyright (c) 2005 Nathan Keynes.
     8  *
     9  * This program is free software; you can redistribute it and/or modify
    10  * it under the terms of the GNU General Public License as published by
    11  * the Free Software Foundation; either version 2 of the License, or
    12  * (at your option) any later version.
    13  *
    14  * This program is distributed in the hope that it will be useful,
    15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
    16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    17  * GNU General Public License for more details.
    18  */
    20 #ifndef dream_video_H
    21 #define dream_video_H
    23 #include <stdint.h>
    24 #include <glib.h>
    25 #include <GL/gl.h>
    26 #include "dream.h"
    28 #ifdef __cplusplus
    29 extern "C" {
    30 #endif
    32 /**
    33  * Supported colour formats. Note that ARGB4444 is only ever used for texture
    34  * rendering (it's not valid for display purposes).
    35  */
    36 #define COLFMT_ARGB1555  0
    37 #define COLFMT_RGB565    1
    38 #define COLFMT_ARGB4444  2
    39 #define COLFMT_YUV422    3 /* 8-bit YUV (texture source only) */
    40 #define COLFMT_RGB888    4 /* 24-bit RGB */
    41 #define COLFMT_ARGB8888  5
    42 #define COLFMT_INDEX4    6 /* 4 bit indexed colour (texture source only) */
    43 #define COLFMT_INDEX8    7 /* 8-bit indexed colour (texture source only) */
    44 #define COLFMT_RGB0888   8 /* 32-bit RGB */
    46 struct colour_format {
    47     GLint type, format, int_format;
    48     int bpp;
    49 };
    50 extern struct colour_format colour_formats[];
    52 extern int colour_format_bytes[];
    54 /**
    55  * Structure to hold pixel data held in GL buffers.
    56  */
    57 typedef struct render_buffer {
    58     uint32_t width;
    59     uint32_t height;
    60     uint32_t rowstride;
    61     int colour_format;
    62     sh4addr_t address; /* Address buffer was rendered to, or -1 for unrendered */
    63     uint32_t size; /* Size of buffer in bytes, must be width*height*bpp */
    64     int scale;
    65     unsigned int buf_id; /* driver-specific buffer id, if applicable */
    66     gboolean flushed; /* True if the buffer has been flushed to vram */
    67 } *render_buffer_t;
    69 /**
    70  * Structure to hold pixel data stored in pvr2 vram, as opposed to data in
    71  * GL buffers.
    72  */
    73 typedef struct frame_buffer {
    74     uint32_t width;
    75     uint32_t height;
    76     uint32_t rowstride;
    77     int colour_format;
    78     sh4addr_t address;
    79     uint32_t size; /* Size of buffer in bytes, must be width*height*bpp */
    80     char *data;
    81 } * frame_buffer_t;
    83 /**
    84  * Core video driver - exports function to setup a GL context, as well as handle
    85  * keyboard input and display resultant output.
    86  */
    87 typedef struct display_driver {
    88     char *name;
    89     /**
    90      * Initialize the driver. This is called only once at startup time, and
    91      * is guaranteed to be called before any other methods.
    92      * @return TRUE if the driver was successfully initialized, otherwise
    93      * FALSE.
    94      */
    95     gboolean (*init_driver)(void);
    97     /**
    98      * Cleanly shutdown the driver. Normally only called at system shutdown
    99      * time.
   100      */
   101     void (*shutdown_driver)(void);
   103     /**
   104      * Given a particular keysym, return the keycode associated with it.
   105      * @param keysym The keysym to be resolved, ie "Tab"
   106      * @return the display-specific keycode, or 0 if the keysym cannot
   107      * be resolved.
   108      */
   109     uint16_t (*resolve_keysym)( const gchar *keysym );
   111     /**
   112      * Create a render target with the given width and height.
   113      */
   114     render_buffer_t (*create_render_buffer)( uint32_t width, uint32_t height );
   116     /**
   117      * Destroy the specified render buffer and release any associated
   118      * resources.
   119      */
   120     void (*destroy_render_buffer)( render_buffer_t buffer );
   122     /**
   123      * Set the current rendering target to the specified buffer.
   124      */
   125     gboolean (*set_render_target)( render_buffer_t buffer );
   127     /**
   128      * Display a single frame using the supplied pixmap data.
   129      */
   130     gboolean (*display_frame_buffer)( frame_buffer_t buffer );
   132     /**
   133      * Display a single frame using a previously rendered GL buffer.
   134      */
   135     gboolean (*display_render_buffer)( render_buffer_t buffer );
   137     /**
   138      * Display a single blanked frame using a fixed colour for the
   139      * entire frame (specified in RGB888 format). 
   140      */
   141     gboolean (*display_blank)( uint32_t rgb );
   143     /**
   144      * Copy the image data from the GL buffer to the target memory buffer,
   145      * using the format etc from the buffer. This may force a glFinish()
   146      * but does not invalidate the buffer.
   147      */
   148     gboolean (*read_render_buffer)( render_buffer_t buffer, unsigned char *target );
   150 } *display_driver_t;
   152 gboolean display_set_driver( display_driver_t driver );
   154 extern uint32_t pvr2_frame_counter;
   156 extern display_driver_t display_driver;
   158 extern struct display_driver display_gtk_driver;
   159 extern struct display_driver display_null_driver;
   161 /****************** Input methods **********************/
   163 typedef void (*input_key_callback_t)( void *data, uint32_t value, gboolean isKeyDown );
   165 gboolean input_register_key( const gchar *keysym, input_key_callback_t callback,
   166 			     void *data, uint32_t value );
   168 void input_unregister_key( const gchar *keysym, input_key_callback_t callback,
   169 			   void *data, uint32_t value );
   171 gboolean input_is_key_valid( const gchar *keysym );
   173 gboolean input_is_key_registered( const gchar *keysym );
   175 void input_event_keydown( uint16_t keycode );
   177 void input_event_keyup( uint16_t keycode );
   181 #ifdef __cplusplus
   182 }
   183 #endif
   184 #endif
.