nkeynes@635: /** nkeynes@636: * $Id$ nkeynes@635: * nkeynes@635: * GL-based support functions nkeynes@635: * nkeynes@635: * Copyright (c) 2005 Nathan Keynes. nkeynes@635: * nkeynes@635: * This program is free software; you can redistribute it and/or modify nkeynes@635: * it under the terms of the GNU General Public License as published by nkeynes@635: * the Free Software Foundation; either version 2 of the License, or nkeynes@635: * (at your option) any later version. nkeynes@635: * nkeynes@635: * This program is distributed in the hope that it will be useful, nkeynes@635: * but WITHOUT ANY WARRANTY; without even the implied warranty of nkeynes@635: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the nkeynes@635: * GNU General Public License for more details. nkeynes@635: */ nkeynes@635: nkeynes@635: #ifndef lxdream_glutil_H nkeynes@635: #define lxdream_glutil_H nkeynes@635: nkeynes@687: #include nkeynes@635: #include "display.h" nkeynes@635: nkeynes@736: #ifdef __cplusplus nkeynes@736: extern "C" { nkeynes@736: #endif nkeynes@736: nkeynes@635: /** nkeynes@635: * Test if a specific extension is supported. From opengl.org nkeynes@635: * @param extension extension name to check for nkeynes@635: * @return TRUE if supported, otherwise FALSE. nkeynes@635: */ nkeynes@635: gboolean isGLExtensionSupported( const char *extension ); nkeynes@635: nkeynes@667: /** nkeynes@687: * Dump GL information to the output stream, usually for debugging purposes nkeynes@687: */ nkeynes@687: void glPrintInfo( FILE *out ); nkeynes@687: nkeynes@687: /** nkeynes@1150: * Check for a GL error and print a message if there is one nkeynes@1150: * @param context If not null, a string to be printed along side an error message nkeynes@1159: * @return FALSE if there was an error, otherwise TRUE nkeynes@1150: */ nkeynes@1150: gboolean gl_check_error( const char *context ); nkeynes@1150: /** nkeynes@667: * Test if secondary color (GL_COLOR_SUM) is supported. nkeynes@667: */ nkeynes@667: gboolean isGLSecondaryColorSupported(); nkeynes@667: nkeynes@667: gboolean isGLVertexBufferSupported(); nkeynes@1134: gboolean isGLVertexRangeSupported(); nkeynes@667: gboolean isGLPixelBufferSupported(); nkeynes@1140: gboolean isGLMultitextureSupported(); nkeynes@667: gboolean isGLMirroredTextureSupported(); nkeynes@635: nkeynes@1207: /****** Extension variant wrangling *****/ nkeynes@1207: nkeynes@1210: #if defined(GL_MIRRORED_REPEAT_ARB) && !defined(GL_MIRRORED_REPEAT) nkeynes@1210: #define GL_MIRRORED_REPEAT GL_MIRRORED_REPEAT_ARB nkeynes@1210: #endif nkeynes@1207: nkeynes@1210: #if defined(GL_FRAMEBUFFER_EXT) && !defined(GL_FRAMEBUFFER) nkeynes@1210: #define GL_FRAMEBUFFER GL_FRAMEBUFFER_EXT nkeynes@1210: #endif nkeynes@1210: nkeynes@1210: #if defined(GL_RENDERBUFFER_EXT) && !defined(GL_RENDERBUFFER) nkeynes@1210: #define GL_RENDERBUFFER GL_RENDERBUFFER_EXT nkeynes@1210: #endif nkeynes@1210: nkeynes@1210: #if defined(GL_COLOR_ATTACHMENT0_EXT) && !defined(GL_COLOR_ATTACHMENT0) nkeynes@1210: #define GL_COLOR_ATTACHMENT0 GL_COLOR_ATTACHMENT0_EXT nkeynes@1210: #endif nkeynes@1210: nkeynes@1210: #if defined(GL_MAX_COLOR_ATTACHMENTS_EXT) && !defined(GL_MAX_COLOR_ATTACHMENTS) nkeynes@1210: #define GL_MAX_COLOR_ATTACHMENTS GL_MAX_COLOR_ATTACHMENTS_EXT nkeynes@1210: #endif nkeynes@1210: nkeynes@1210: #if defined(GL_STENCIL_ATTACHMENT_EXT) && !defined(GL_STENCIL_ATTACHMENT) nkeynes@1210: #define GL_STENCIL_ATTACHMENT GL_STENCIL_ATTACHMENT_EXT nkeynes@1210: #endif nkeynes@1210: nkeynes@1210: #if defined(GL_DEPTH_ATTACHMENT_EXT) && !defined(GL_DEPTH_ATTACHMENT) nkeynes@1210: #define GL_DEPTH_ATTACHMENT GL_DEPTH_ATTACHMENT_EXT nkeynes@1210: #endif nkeynes@1210: nkeynes@1210: #if defined(GL_FRAMEBUFFER_COMPLETE_EXT) && !defined(GL_FRAMEBUFFER_COMPLETE) nkeynes@1210: #define GL_FRAMEBUFFER_COMPLETE GL_FRAMEBUFFER_COMPLETE_EXT nkeynes@1210: #endif nkeynes@1210: nkeynes@1210: #if defined(HAVE_OPENGL_FBO_EXT) && !defined(HAVE_OPENGL_FBO) nkeynes@1210: #define glGenFramebuffers glGenFramebuffersEXT nkeynes@1210: #define glGenRenderbuffers glGenRenderbuffersEXT nkeynes@1210: #define glBindFramebuffer glBindFramebufferEXT nkeynes@1210: #define glDeleteFramebuffers glDeleteFramebuffersEXT nkeynes@1210: #define glDeleteRenderbuffers glDeleteRenderbuffersEXT nkeynes@1210: #define glBindFramebuffer glBindFramebufferEXT nkeynes@1210: #define glBindRenderbuffer glBindRenderbufferEXT nkeynes@1210: #define glRenderbufferStorage glRenderbufferStorageEXT nkeynes@1210: #define glFramebufferRenderbuffer glFramebufferRenderbufferEXT nkeynes@1210: #define glFramebufferTexture2D glFramebufferTexture2DEXT nkeynes@1210: #define glCheckFramebufferStatus glCheckFramebufferStatusEXT nkeynes@1210: #endif nkeynes@1207: nkeynes@1207: nkeynes@635: /****** Shader handling (gl_sl.c) *****/ nkeynes@635: gboolean glsl_is_supported(void); nkeynes@1134: const char *glsl_get_version(void); nkeynes@1130: gboolean glsl_load_shaders( ); nkeynes@635: void glsl_unload_shaders(void); nkeynes@1130: void glsl_clear_shader(); nkeynes@635: nkeynes@1134: /* Convenience formatting function for driver use */ nkeynes@1134: void fprint_extensions( FILE *out, const char *extensions ); nkeynes@1134: nkeynes@736: #ifdef __cplusplus nkeynes@736: } nkeynes@736: #endif nkeynes@736: nkeynes@635: #endif /* !lxdream_glutil_H */