filename | src/pvr2/glutil.h |
changeset | 1287:dac8f363f1fe |
prev | 1282: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 */ |
.