Search
lxdream.org :: lxdream/src/display.h
lxdream 0.9.1
released Jun 29
Download Now
filename src/display.h
changeset 144:7f0714e89aaa
next162:f7781f928f7e
author nkeynes
date Thu Jun 15 10:27:10 2006 +0000 (17 years ago)
permissions -rw-r--r--
last change Add preliminary call-stack tracing ability
Fix INTC state save/load/reset
view annotate diff log raw
     1 /**
     2  * $Id: display.h,v 1.1 2006-05-15 08:28:48 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 typedef struct video_buffer {
    44     uint32_t hres;
    45     uint32_t vres;
    46     uint32_t rowstride;
    47     int colour_format;
    48     char *data;
    49 } *video_buffer_t;
    51 /**
    52  * Core video driver - expected to directly support an OpenGL context
    53  */
    54 typedef struct display_driver {
    55     char *name;
    56     /**
    57      * Initialize the driver. This is called only once at startup time, and
    58      * is guaranteed to be called before any other methods.
    59      * @return TRUE if the driver was successfully initialized, otherwise
    60      * FALSE.
    61      */
    62     gboolean (*init_driver)(void);
    64     /**
    65      * Cleanly shutdown the driver. Normally only called at system shutdown
    66      * time.
    67      */
    68     void (*shutdown_driver)(void);
    70     /**
    71      * Given a particular keysym, return the keycode associated with it.
    72      * @param keysym The keysym to be resolved, ie "Tab"
    73      * @return the display-specific keycode, or 0 if the keysym cannot
    74      * be resolved.
    75      */
    76     uint16_t (*resolve_keysym)( const gchar *keysym );
    78     /**
    79      * Set the current display format to the specified values. This is
    80      * called immediately prior to any display frame call where the
    81      * parameters have changed from the previous frame
    82      */
    83     gboolean (*set_display_format)( uint32_t hres, uint32_t vres, 
    84 				    int colour_fmt );
    86     /**
    87      * Set the current rendering format to the specified values. This is
    88      * called immediately prior to starting rendering of a frame where the
    89      * parameters have changed from the previous frame. Note that the driver
    90      * is not required to precisely support the requested colour format.
    91      *
    92      * This method is also responsible for setting up an appropriate GL
    93      * context for the main engine to render into.
    94      *
    95      * @param hres The horizontal resolution (ie 640)
    96      * @param vres The vertical resolution (ie 480)
    97      * @param colour_fmt The colour format of the buffer (ie COLFMT_ARGB4444)
    98      * @param texture Flag indicating that the frame being rendered is a
    99      * texture, rather than a display frame. 
   100      */
   101     gboolean (*set_render_format)( uint32_t hres, uint32_t vres,
   102 				   int colour_fmt, gboolean texture );
   103     /**
   104      * Display a single frame using the supplied pixmap data. Is assumed to
   105      * invalidate the current GL front buffer (but not the back buffer).
   106      */
   107     gboolean (*display_frame)( video_buffer_t buffer );
   109     /**
   110      * Display a single blanked frame using a fixed colour for the
   111      * entire frame (specified in RGB888 format). Is assumed to invalidate
   112      * the current GL front buffer (but not the back buffer).
   113      */
   114     gboolean (*display_blank_frame)( uint32_t rgb );
   116     /**
   117      * Promote the current render back buffer to the front buffer
   118      */
   119     void (*display_back_buffer)( void );
   120 } *display_driver_t;
   122 void video_open( void );
   123 void video_update_frame( void );
   124 void video_update_size( int, int, int );
   126 extern uint32_t pvr2_frame_counter;
   128 extern display_driver_t display_driver;
   130 extern struct display_driver display_gtk_driver;
   131 extern struct display_driver display_null_driver;
   133 /****************** Input methods **********************/
   135 typedef void (*input_key_callback_t)( void *data, uint32_t value, gboolean isKeyDown );
   137 gboolean input_register_key( const gchar *keysym, input_key_callback_t callback,
   138 			     void *data, uint32_t value );
   140 void input_unregister_key( const gchar *keysym );
   142 gboolean input_is_key_valid( const gchar *keysym );
   144 gboolean input_is_key_registered( const gchar *keysym );
   146 void input_event_keydown( uint16_t keycode );
   148 void input_event_keyup( uint16_t keycode );
   152 #ifdef __cplusplus
   153 }
   154 #endif
   155 #endif
.