⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 buildgl.c

📁 小型游戏引擎
💻 C
字号:
/* * OpenGL support code. * *  Written by Ryan C. Gordon. (icculus@clutteredmind.org) * * Please do NOT harrass Ken Silverman about any code modifications *  (including this file) to BUILD. *//* * "Build Engine & Tools" Copyright (c) 1993-1997 Ken Silverman * Ken Silverman's official web site: "http://www.advsys.net/ken" * See the included license file "BUILDLIC.TXT" for license info. * This file IS NOT A PART OF Ken Silverman's original release */#include <stdio.h>#include <stdlib.h>#include <assert.h>#include "platform.h"#include "SDL.h"#include "display.h"#include "buildgl.h"glGetString_t dglGetString = NULL;glBegin_t dglBegin = NULL;glEnd_t dglEnd = NULL;glClear_t dglClear = NULL;glClearColor_t dglClearColor = NULL;glDrawPixels_t dglDrawPixels = NULL;glGetPixelMapfv_t dglGetPixelMapfv = NULL;glPixelMapfv_t dglPixelMapfv = NULL;glPixelStorei_t dglPixelStorei = NULL;glEnable_t dglEnable = NULL;glDisable_t dglDisable = NULL;glViewport_t dglViewport = NULL;glGenTextures_t dglGenTextures = NULL;glDeleteTextures_t dglDeleteTextures = NULL;glBindTexture_t dglBindTexture = NULL;glTexParameteri_t dglTexParameteri = NULL;glTexImage2D_t dglTexImage2D = NULL;glTexCoord2f_t dglTexCoord2f = NULL;glVertex2f_t dglVertex2f = NULL;glVertex3f_t dglVertex3f = NULL;glColor3f_t dglColor3f = NULL;glGetError_t dglGetError = NULL;glGetIntegerv_t dglGetIntegerv = NULL;glClearDepth_t dglClearDepth = NULL;glDepthFunc_t dglDepthFunc = NULL;glShadeModel_t dglShadeModel = NULL;glMatrixMode_t dglMatrixMode = NULL;glLoadIdentity_t dglLoadIdentity = NULL;glPixelTransferi_t dglPixelTransferi = NULL;void sgldebug(const char *fmt, ...);static int debug_hall_of_mirrors = 0;static void *opengl_symload(void **ptr, const char *sym){    void *retval = NULL;    retval = SDL_GL_GetProcAddress(sym);    if (retval == NULL)        sgldebug("Symbol \"%s\" NOT located.", sym);    else        sgldebug("Symbol \"%s\" located.", sym);    if (ptr != NULL)        *ptr = retval;    return(retval);} /* open_symload */static int opengl_load_symbols(void){    if (!opengl_symload((void **) &dglGetString, "glGetString")) return(-1);    if (!opengl_symload((void **) &dglBegin, "glBegin")) return(-1);    if (!opengl_symload((void **) &dglEnd, "glEnd")) return(-1);    if (!opengl_symload((void **) &dglClear, "glClear")) return(-1);    if (!opengl_symload((void **) &dglClearColor, "glClearColor")) return(-1);    if (!opengl_symload((void **) &dglDrawPixels, "glDrawPixels")) return(-1);    if (!opengl_symload((void **) &dglPixelStorei, "glPixelStorei")) return(-1);    if (!opengl_symload((void **) &dglGetPixelMapfv, "glGetPixelMapfv")) return(-1);    if (!opengl_symload((void **) &dglPixelMapfv, "glPixelMapfv")) return(-1);    if (!opengl_symload((void **) &dglEnable, "glEnable")) return(-1);    if (!opengl_symload((void **) &dglDisable, "glDisable")) return(-1);    if (!opengl_symload((void **) &dglViewport, "glViewport")) return(-1);    if (!opengl_symload((void **) &dglGenTextures, "glGenTextures")) return(-1);    if (!opengl_symload((void **) &dglDeleteTextures, "glDeleteTextures")) return(-1);    if (!opengl_symload((void **) &dglBindTexture, "glBindTexture")) return(-1);    if (!opengl_symload((void **) &dglTexParameteri, "glTexParameteri")) return(-1);    if (!opengl_symload((void **) &dglTexImage2D, "glTexImage2D")) return(-1);    if (!opengl_symload((void **) &dglTexCoord2f, "glTexCoord2f")) return(-1);    if (!opengl_symload((void **) &dglVertex2f, "glVertex2f")) return(-1);    if (!opengl_symload((void **) &dglVertex3f, "glVertex3f")) return(-1);    if (!opengl_symload((void **) &dglColor3f, "glColor3f")) return(-1);    if (!opengl_symload((void **) &dglGetError, "glGetError")) return(-1);    if (!opengl_symload((void **) &dglGetIntegerv, "glGetIntegerv")) return(-1);    if (!opengl_symload((void **) &dglClearDepth, "glClearDepth")) return(-1);    if (!opengl_symload((void **) &dglDepthFunc, "glDepthFunc")) return(-1);    if (!opengl_symload((void **) &dglShadeModel, "glShadeModel")) return(-1);    if (!opengl_symload((void **) &dglMatrixMode, "glMatrixMode")) return(-1);    if (!opengl_symload((void **) &dglLoadIdentity, "glLoadIdentity")) return(-1);    if (!opengl_symload((void **) &dglPixelTransferi, "glPixelTransferi")) return(-1);    return(0);} /* opengl_load_symbols */static int opengl_try_libname(const char *libname){    int rc = -1;    sgldebug("Trying to open library \"%s\"...",                libname ? libname : "[default]");    SDL_ClearError();    rc = SDL_GL_LoadLibrary(libname);    if (rc == -1)        sgldebug("Library opening failed; [%s].", SDL_GetError());    else    {        sgldebug("Library opened successfully!");        rc = opengl_load_symbols();        SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);    } /* else */    return(rc);} /* opengl_try_libname */static int opengl_lib_is_loaded = 0;int opengl_load_library(void){    char *envlib = getenv(BUILD_GLLIBRARY);    int rc = 0;    debug_hall_of_mirrors = (getenv(BUILD_HALLOFMIRRORS) != NULL);    if (!opengl_lib_is_loaded)  /* it's cool. Go on. */    {        rc = opengl_try_libname(envlib);        if (rc == -1)        {            sgldebug("Out of ideas. Giving up.");            return(-1);        } /* if */        opengl_lib_is_loaded = 1;    } /* if */    return(0);} /* opengl_load_library */static Uint8 mirrorcolor = 0;void opengl_swapbuffers(void){    if (using_opengl())    {        SDL_GL_SwapBuffers();        if (debug_hall_of_mirrors)        {            dglClearColor( ((GLfloat) mirrorcolor) / 255.0, 0.0f, 0.0f, 0.0f );            mirrorcolor++;        } /* if */        dglClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);        dglEnable(GL_DEPTH_TEST);    } /* if */} /* opengl_swapbuffers *//* end of buildgl.c ... */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -