Search
lxdream.org :: lxdream/src/pvr2/glutil.h
lxdream 0.9.1
released Jun 29
Download Now
filename src/pvr2/glutil.h
changeset 1287:dac8f363f1fe
prev1282:9f445c5e252b
author nkeynes
date Sun Jul 01 13:20:34 2012 +1000 (11 years ago)
permissions -rw-r--r--
last change Add support for Nokia N900
- Generic support for EGL with GTK
- Workaround for nokia bug with egl config
Based on patch from guinux, thanks!
file annotate diff log raw
nkeynes@635
     1
/**
nkeynes@636
     2
 * $Id$
nkeynes@635
     3
 *
nkeynes@635
     4
 * GL-based support functions 
nkeynes@635
     5
 *
nkeynes@635
     6
 * Copyright (c) 2005 Nathan Keynes.
nkeynes@635
     7
 *
nkeynes@635
     8
 * This program is free software; you can redistribute it and/or modify
nkeynes@635
     9
 * it under the terms of the GNU General Public License as published by
nkeynes@635
    10
 * the Free Software Foundation; either version 2 of the License, or
nkeynes@635
    11
 * (at your option) any later version.
nkeynes@635
    12
 *
nkeynes@635
    13
 * This program is distributed in the hope that it will be useful,
nkeynes@635
    14
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
nkeynes@635
    15
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
nkeynes@635
    16
 * GNU General Public License for more details.
nkeynes@635
    17
 */
nkeynes@635
    18
nkeynes@635
    19
#ifndef lxdream_glutil_H
nkeynes@635
    20
#define lxdream_glutil_H
nkeynes@635
    21
nkeynes@687
    22
#include <stdio.h>
nkeynes@635
    23
#include "display.h"
nkeynes@635
    24
nkeynes@736
    25
#ifdef __cplusplus
nkeynes@736
    26
extern "C" {
nkeynes@736
    27
#endif
nkeynes@736
    28
nkeynes@635
    29
/**
nkeynes@635
    30
 * Test if a specific extension is supported. From opengl.org
nkeynes@635
    31
 * @param extension extension name to check for
nkeynes@635
    32
 * @return TRUE if supported, otherwise FALSE.
nkeynes@635
    33
 */
nkeynes@635
    34
gboolean isGLExtensionSupported( const char *extension );
nkeynes@635
    35
nkeynes@1245
    36
gboolean isOpenGLES2();
nkeynes@1245
    37
nkeynes@667
    38
/**
nkeynes@687
    39
 * Dump GL information to the output stream, usually for debugging purposes
nkeynes@687
    40
 */
nkeynes@687
    41
void glPrintInfo( FILE *out );
nkeynes@687
    42
nkeynes@687
    43
/**
nkeynes@1150
    44
 * Check for a GL error and print a message if there is one
nkeynes@1150
    45
 * @param context If not null, a string to be printed along side an error message
nkeynes@1159
    46
 * @return FALSE if there was an error, otherwise TRUE
nkeynes@1150
    47
 */
nkeynes@1150
    48
gboolean gl_check_error( const char *context );
nkeynes@1150
    49
/**
nkeynes@667
    50
 * Test if secondary color (GL_COLOR_SUM) is supported.
nkeynes@667
    51
 */
nkeynes@667
    52
gboolean isGLSecondaryColorSupported();
nkeynes@667
    53
nkeynes@667
    54
gboolean isGLVertexBufferSupported();
nkeynes@1134
    55
gboolean isGLVertexRangeSupported();
nkeynes@667
    56
gboolean isGLPixelBufferSupported();
nkeynes@1140
    57
gboolean isGLMultitextureSupported();
nkeynes@667
    58
gboolean isGLMirroredTextureSupported();
nkeynes@1275
    59
gboolean isGLBGRATextureSupported();
nkeynes@1258
    60
gboolean isGLShaderSupported();
nkeynes@1223
    61
GLint glGetMaxColourAttachments();
nkeynes@635
    62
nkeynes@1282
    63
/**
nkeynes@1282
    64
 * Wrapper function for glTexImage2D calls that may have BGRA data - on systems
nkeynes@1282
    65
 * where this isn't directly supported, swizzle the data into an acceptable RGBA
nkeynes@1282
    66
 * equivalent. If preserveData is true, data will not be modified - otherwise
nkeynes@1282
    67
 * the method may swizzle data in-place.
nkeynes@1282
    68
 */
nkeynes@1282
    69
void glTexImage2DBGRA( int level, GLint intFormat, int width, int height, GLint format, GLint type, unsigned char *data, int preserveData );
nkeynes@1282
    70
void glTexSubImage2DBGRA( int level, int xoff, int yoff, int width, int height, GLint format, GLint type, unsigned char *data, int preserveData );
nkeynes@1282
    71
nkeynes@1207
    72
/****** Extension variant wrangling *****/
nkeynes@1207
    73
nkeynes@1210
    74
#if defined(GL_MIRRORED_REPEAT_ARB) && !defined(GL_MIRRORED_REPEAT)
nkeynes@1210
    75
#define GL_MIRRORED_REPEAT GL_MIRRORED_REPEAT_ARB
nkeynes@1210
    76
#endif
nkeynes@1207
    77
nkeynes@1219
    78
#if defined(GL_MAX_TEXTURE_UNITS_ARB) && !defined(GL_MAX_TEXTURE_UNITS)
nkeynes@1219
    79
#define GL_MAX_TEXTURE_UNITS GL_MAX_TEXTURE_UNITS_ARB
nkeynes@1219
    80
#endif
nkeynes@1219
    81
nkeynes@1210
    82
#if defined(GL_FRAMEBUFFER_EXT) && !defined(GL_FRAMEBUFFER)
nkeynes@1210
    83
#define GL_FRAMEBUFFER GL_FRAMEBUFFER_EXT
nkeynes@1210
    84
#endif
nkeynes@1210
    85
nkeynes@1210
    86
#if defined(GL_RENDERBUFFER_EXT) && !defined(GL_RENDERBUFFER)
nkeynes@1210
    87
#define GL_RENDERBUFFER GL_RENDERBUFFER_EXT
nkeynes@1210
    88
#endif
nkeynes@1210
    89
nkeynes@1210
    90
#if defined(GL_COLOR_ATTACHMENT0_EXT) && !defined(GL_COLOR_ATTACHMENT0)
nkeynes@1210
    91
#define GL_COLOR_ATTACHMENT0 GL_COLOR_ATTACHMENT0_EXT
nkeynes@1210
    92
#endif
nkeynes@1210
    93
nkeynes@1210
    94
#if defined(GL_MAX_COLOR_ATTACHMENTS_EXT) && !defined(GL_MAX_COLOR_ATTACHMENTS)
nkeynes@1210
    95
#define GL_MAX_COLOR_ATTACHMENTS GL_MAX_COLOR_ATTACHMENTS_EXT
nkeynes@1210
    96
#endif
nkeynes@1210
    97
nkeynes@1210
    98
#if defined(GL_STENCIL_ATTACHMENT_EXT) && !defined(GL_STENCIL_ATTACHMENT)
nkeynes@1210
    99
#define GL_STENCIL_ATTACHMENT GL_STENCIL_ATTACHMENT_EXT
nkeynes@1210
   100
#endif
nkeynes@1210
   101
nkeynes@1210
   102
#if defined(GL_DEPTH_ATTACHMENT_EXT) && !defined(GL_DEPTH_ATTACHMENT)
nkeynes@1210
   103
#define GL_DEPTH_ATTACHMENT GL_DEPTH_ATTACHMENT_EXT
nkeynes@1210
   104
#endif
nkeynes@1210
   105
nkeynes@1223
   106
#if defined(GL_DEPTH_COMPONENT24_OES) && !defined(GL_DEPTH_COMPONENT24)
nkeynes@1223
   107
#define GL_DEPTH_COMPONENT24 GL_DEPTH_COMPONENT24_OES
nkeynes@1223
   108
#endif
nkeynes@1223
   109
nkeynes@1222
   110
#ifndef GL_DEPTH24_STENCIL8
nkeynes@1222
   111
#if defined(GL_DEPTH24_STENCIL8_EXT)
nkeynes@1222
   112
#define GL_DEPTH24_STENCIL8 GL_DEPTH24_STENCIL8_EXT
nkeynes@1222
   113
#elif defined(GL_DEPTH24_STENCIL8_OES)
nkeynes@1222
   114
#define GL_DEPTH24_STENCIL8 GL_DEPTH24_STENCIL8_OES
nkeynes@1222
   115
#endif
nkeynes@1222
   116
#endif
nkeynes@1222
   117
nkeynes@1210
   118
#if defined(GL_FRAMEBUFFER_COMPLETE_EXT) && !defined(GL_FRAMEBUFFER_COMPLETE)
nkeynes@1210
   119
#define GL_FRAMEBUFFER_COMPLETE GL_FRAMEBUFFER_COMPLETE_EXT
nkeynes@1210
   120
#endif
nkeynes@1210
   121
nkeynes@1245
   122
#if defined(GL_UNSIGNED_SHORT_1_5_5_5_REV_EXT) && !defined(GL_UNSIGNED_SHORT_1_5_5_5_REV)
nkeynes@1245
   123
#define GL_UNSIGNED_SHORT_1_5_5_5_REV GL_UNSIGNED_SHORT_1_5_5_5_REV_EXT
nkeynes@1245
   124
#endif
nkeynes@1245
   125
nkeynes@1245
   126
#if defined(GL_UNSIGNED_SHORT_4_4_4_4_REV_EXT) && !defined(GL_UNSIGNED_SHORT_4_4_4_4_REV)
nkeynes@1245
   127
#define GL_UNSIGNED_SHORT_4_4_4_4_REV GL_UNSIGNED_SHORT_4_4_4_4_REV_EXT
nkeynes@1245
   128
#endif
nkeynes@1245
   129
nkeynes@1245
   130
#if defined(GL_BGRA_EXT) && !defined(GL_BGRA)
nkeynes@1245
   131
#define GL_BGRA GL_BGRA_EXT
nkeynes@1245
   132
#endif
nkeynes@1245
   133
nkeynes@1258
   134
#if defined(GL_SHADING_LANGUAGE_VERSION_ARB) && !defined(GL_SHADING_LANGUAGE_VERSION)
nkeynes@1258
   135
#define GL_SHADING_LANGUAGE_VERSION GL_SHADING_LANGUAGE_VERSION_ARB
nkeynes@1258
   136
#endif
nkeynes@1258
   137
nkeynes@1258
   138
nkeynes@1210
   139
#if defined(HAVE_OPENGL_FBO_EXT) && !defined(HAVE_OPENGL_FBO)
nkeynes@1210
   140
#define glGenFramebuffers glGenFramebuffersEXT
nkeynes@1210
   141
#define glGenRenderbuffers glGenRenderbuffersEXT
nkeynes@1210
   142
#define glBindFramebuffer glBindFramebufferEXT
nkeynes@1210
   143
#define glDeleteFramebuffers glDeleteFramebuffersEXT
nkeynes@1210
   144
#define glDeleteRenderbuffers glDeleteRenderbuffersEXT
nkeynes@1210
   145
#define glBindFramebuffer glBindFramebufferEXT
nkeynes@1210
   146
#define glBindRenderbuffer glBindRenderbufferEXT
nkeynes@1210
   147
#define glRenderbufferStorage glRenderbufferStorageEXT
nkeynes@1210
   148
#define glFramebufferRenderbuffer glFramebufferRenderbufferEXT
nkeynes@1210
   149
#define glFramebufferTexture2D glFramebufferTexture2DEXT
nkeynes@1210
   150
#define glCheckFramebufferStatus glCheckFramebufferStatusEXT
nkeynes@1210
   151
#endif
nkeynes@1207
   152
nkeynes@1236
   153
/* Define an orthographic transform matrix, given the bounding box (assuming origin at 0) */
nkeynes@1236
   154
void defineOrthoMatrix( GLfloat *matrix, GLfloat width, GLfloat height, GLfloat znear, GLfloat zfar );
nkeynes@1236
   155
nkeynes@1134
   156
/* Convenience formatting function for driver use */
nkeynes@1134
   157
void fprint_extensions( FILE *out, const char *extensions );
nkeynes@1134
   158
nkeynes@1287
   159
/****** Texture formats (missing definitions) *****/
nkeynes@1287
   160
nkeynes@1287
   161
#ifndef GL_UNSIGNED_SHORT_4_4_4_4_REV
nkeynes@1287
   162
#define GL_UNSIGNED_SHORT_4_4_4_4_REV 0x8365
nkeynes@1287
   163
#endif
nkeynes@1287
   164
nkeynes@1287
   165
#ifndef GL_UNSIGNED_SHORT_1_5_5_5_REV
nkeynes@1287
   166
#define GL_UNSIGNED_SHORT_1_5_5_5_REV 0x8366
nkeynes@1287
   167
#endif
nkeynes@1287
   168
nkeynes@1287
   169
#ifndef GL_BGRA
nkeynes@1287
   170
#define GL_BGRA 0x80E1
nkeynes@1287
   171
#endif
nkeynes@1287
   172
nkeynes@736
   173
#ifdef __cplusplus
nkeynes@736
   174
}
nkeynes@736
   175
#endif
nkeynes@736
   176
nkeynes@635
   177
#endif /* !lxdream_glutil_H */
.