Search
lxdream.org :: lxdream/src/display.h
lxdream 0.9.1
released Jun 29
Download Now
filename src/display.h
changeset 162:f7781f928f7e
prev144:7f0714e89aaa
next327:00d55a462af3
author nkeynes
date Wed Jan 03 09:00:17 2007 +0000 (17 years ago)
permissions -rw-r--r--
last change Adjust timers when they're read rather than waiting until the next time
slice. Also temporarily cut the CPU time by 4.
Initialize the FRQCR register to 0x0E0A for convenience
view annotate diff log raw
     1 /**
     2  * $Id: display.h,v 1.2 2006-06-18 11:57:55 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>
    26 #ifdef __cplusplus
    27 extern "C" {
    28 #endif
    30 /**
    31  * Supported colour formats. Note that ARGB4444 is only ever used for texture
    32  * rendering (it's not valid for display purposes).
    33  */
    34 #define COLFMT_RGB565    1
    35 #define COLFMT_RGB888    4
    36 #define COLFMT_ARGB1555  0
    37 #define COLFMT_ARGB8888  5
    38 #define COLFMT_ARGB4444  2
    39 #define COLFMT_YUV422    3 /* 8-bit YUV (texture source only) */
    40 #define COLFMT_INDEX4    6 /* 4 bit indexed colour (texture source only) */
    41 #define COLFMT_INDEX8    7 /* 8-bit indexed colour (texture source only) */
    43 extern int colour_format_bytes[];
    45 typedef struct video_buffer {
    46     uint32_t hres;
    47     uint32_t vres;
    48     uint32_t rowstride;
    49     int colour_format;
    50     char *data;
    51 } *video_buffer_t;
    53 /**
    54  * Core video driver - expected to directly support an OpenGL context
    55  */
    56 typedef struct display_driver {
    57     char *name;
    58     /**
    59      * Initialize the driver. This is called only once at startup time, and
    60      * is guaranteed to be called before any other methods.
    61      * @return TRUE if the driver was successfully initialized, otherwise
    62      * FALSE.
    63      */
    64     gboolean (*init_driver)(void);
    66     /**
    67      * Cleanly shutdown the driver. Normally only called at system shutdown
    68      * time.
    69      */
    70     void (*shutdown_driver)(void);
    72     /**
    73      * Given a particular keysym, return the keycode associated with it.
    74      * @param keysym The keysym to be resolved, ie "Tab"
    75      * @return the display-specific keycode, or 0 if the keysym cannot
    76      * be resolved.
    77      */
    78     uint16_t (*resolve_keysym)( const gchar *keysym );
    80     /**
    81      * Set the current display format to the specified values. This is
    82      * called immediately prior to any display frame call where the
    83      * parameters have changed from the previous frame
    84      */
    85     gboolean (*set_display_format)( uint32_t hres, uint32_t vres, 
    86 				    int colour_fmt );
    88     /**
    89      * Set the current rendering format to the specified values. This is
    90      * called immediately prior to starting rendering of a frame where the
    91      * parameters have changed from the previous frame. Note that the driver
    92      * is not required to precisely support the requested colour format.
    93      *
    94      * This method is also responsible for setting up an appropriate GL
    95      * context for the main engine to render into.
    96      *
    97      * @param hres The horizontal resolution (ie 640)
    98      * @param vres The vertical resolution (ie 480)
    99      * @param colour_fmt The colour format of the buffer (ie COLFMT_ARGB4444)
   100      * @param texture Flag indicating that the frame being rendered is a
   101      * texture, rather than a display frame. 
   102      */
   103     gboolean (*set_render_format)( uint32_t hres, uint32_t vres,
   104 				   int colour_fmt, gboolean texture );
   105     /**
   106      * Display a single frame using the supplied pixmap data. Is assumed to
   107      * invalidate the current GL front buffer (but not the back buffer).
   108      */
   109     gboolean (*display_frame)( video_buffer_t buffer );
   111     /**
   112      * Display a single blanked frame using a fixed colour for the
   113      * entire frame (specified in RGB888 format). Is assumed to invalidate
   114      * the current GL front buffer (but not the back buffer).
   115      */
   116     gboolean (*display_blank_frame)( uint32_t rgb );
   118     /**
   119      * Promote the current render back buffer to the front buffer
   120      */
   121     void (*display_back_buffer)( void );
   122 } *display_driver_t;
   124 void video_open( void );
   125 void video_update_frame( void );
   126 void video_update_size( int, int, int );
   128 extern uint32_t pvr2_frame_counter;
   130 extern display_driver_t display_driver;
   132 extern struct display_driver display_gtk_driver;
   133 extern struct display_driver display_null_driver;
   135 /****************** Input methods **********************/
   137 typedef void (*input_key_callback_t)( void *data, uint32_t value, gboolean isKeyDown );
   139 gboolean input_register_key( const gchar *keysym, input_key_callback_t callback,
   140 			     void *data, uint32_t value );
   142 void input_unregister_key( const gchar *keysym );
   144 gboolean input_is_key_valid( const gchar *keysym );
   146 gboolean input_is_key_registered( const gchar *keysym );
   148 void input_event_keydown( uint16_t keycode );
   150 void input_event_keyup( uint16_t keycode );
   154 #ifdef __cplusplus
   155 }
   156 #endif
   157 #endif
.