diff --git a/renderbuffer.cpp b/renderbuffer.cpp index 8df30ee0..8febe62e 100644 --- a/renderbuffer.cpp +++ b/renderbuffer.cpp @@ -29,8 +29,6 @@ GLAPI void APIENTRY glDeleteFramebuffers (GLsizei n, const GLuint *framebuffers) #endif #endif -bool glew = false; - renderbuffer::renderbuffer(int x, int y, bool gl) : x(x), y(y) { valid = false; @@ -47,16 +45,6 @@ renderbuffer::renderbuffer(int x, int y, bool gl) : x(x), y(y) { if(gl) { tx = next_p2(x); ty = next_p2(y); - #if CAP_GLEW - if(!glew) { - glew = true; - GLenum err = glewInit(); - if (GLEW_OK != err) { - addMessage("Failed to initialize GLEW"); - return; - } - } - #endif FramebufferName = renderedTexture = depth_stencil_rb = 0; glGenFramebuffers(1, &FramebufferName); // diff --git a/shaders.cpp b/shaders.cpp index ac9a07ed..e79efa1d 100644 --- a/shaders.cpp +++ b/shaders.cpp @@ -4,9 +4,6 @@ // Copyright (C) 2011-2018 Zeno Rogue, see 'hyper.cpp' for details -// #undef CAP_SHADER -// #define CAP_SHADER 0 - void glError(const char* GLcall, const char* file, const int line) { GLenum errCode = glGetError(); if(errCode!=GL_NO_ERROR) { @@ -16,6 +13,8 @@ void glError(const char* GLcall, const char* file, const int line) { namespace glhr { +bool glew = false; + enum eMode { gmColored, gmTextured, gmVarColored, gmLightFog, gmMAX}; static const flagtype GF_TEXTURE = 1; @@ -128,10 +127,6 @@ void set_modelview(const glmatrix& m) { glLoadMatrixf(m.as_array()); } -void init() { - glEnableClientState(GL_VERTEX_ARRAY); - } - #endif // /* shaders */ @@ -161,7 +156,7 @@ void init(); int compileShader(int type, const string& s) { GLint status; - printf("===\ns%s\n===\n", s.c_str()); + // printf("===\ns%s\n===\n", s.c_str()); GLint shader = glCreateShader(type); const char *ss = s.c_str(); @@ -205,7 +200,7 @@ struct GLprogram { GLprogram(string vsh, string fsh) { _program = glCreateProgram(); - printf("creating program %d\n", _program); + // printf("creating program %d\n", _program); vertShader = compileShader(GL_VERTEX_SHADER, vsh.c_str()); fragShader = compileShader(GL_FRAGMENT_SHADER, fsh.c_str()); @@ -238,7 +233,7 @@ struct GLprogram { uniforms[UNIFORM_MODELVIEWPROJECTION_MATRIX] = glGetUniformLocation(_program, "modelViewProjectionMatrix"); uniforms[UNIFORM_FOGFACTOR] = glGetUniformLocation(_program, "fogfactor"); - printf("uniforms: %d %d\n", uniforms[UNIFORM_MODELVIEWPROJECTION_MATRIX], uniforms[UNIFORM_FOGFACTOR]); + // printf("uniforms: %d %d\n", uniforms[UNIFORM_MODELVIEWPROJECTION_MATRIX], uniforms[UNIFORM_FOGFACTOR]); } ~GLprogram() { @@ -266,49 +261,6 @@ template string stringbuilder(bool i, const string& s, T... t) { else return stringbuilder(t...); } -void init() { - projection = id(); - - for(int i=0; i<4; i++) { - flagtype f = flags[i]; - - bool texture = f & GF_TEXTURE; - bool lightfog = f & GF_LIGHTFOG; - - programs[i] = new GLprogram(stringbuilder( - // "attribute vec4 position;" - // "attribute vec3 normal;" - - 1, "varying vec4 vColor;", - texture, "varying vec2 vTexCoord;", - - 1, "uniform mat4 modelViewProjectionMatrix;", - 1, "uniform float fogfactor;", - - 1, "void main() {", - texture, "vTexCoord = gl_MultiTexCoord0.xy;", - lightfog, "vColor = gl_Color * clamp(1.0 + gl_Vertex.z * fogfactor, 0.0, 1.0);", - !lightfog, "vColor = gl_Color;", - 1, "gl_Position = modelViewProjectionMatrix * gl_Vertex;", - 1, "}"), - - stringbuilder( - - 1, "uniform sampler2D myTexture;", - 1, "varying vec4 vColor;", - texture, "varying vec2 vTexCoord;", - 1, "void main() {", - texture, "gl_FragColor = vColor * texture2D(myTexture, vTexCoord);", - !texture, "gl_FragColor = vColor;", - 1, "}" - )); - } - - glEnableClientState(GL_VERTEX_ARRAY); - switch_mode(gmColored); - programs[gmColored]->enable(); - } - void set_modelview(const glmatrix& modelview) { glmatrix mvp = modelview * projection; glUniformMatrix4fv(current->uniforms[UNIFORM_MODELVIEWPROJECTION_MATRIX], 1, 0, mvp.as_array()); @@ -408,4 +360,69 @@ void fog_max(ld fogmax) { #endif } +void init() { + glEnableClientState(GL_VERTEX_ARRAY); + + #if CAP_GLEW + if(!glew) { + glew = true; + printf("Initializing GLEW\n"); + GLenum err = glewInit(); + if (GLEW_OK != err) { + addMessage("Failed to initialize GLEW"); + printf("Failed to initialize GLEW\n"); + return; + } + } + #endif + + #if CAP_SHADER + projection = id(); + + for(int i=0; i<4; i++) { + flagtype f = flags[i]; + + bool texture = f & GF_TEXTURE; + bool lightfog = f & GF_LIGHTFOG; + + programs[i] = new GLprogram(stringbuilder( + // "attribute vec4 position;" + // "attribute vec3 normal;" + + 1, "varying vec4 vColor;", + texture, "varying vec2 vTexCoord;", + + 1, "uniform mat4 modelViewProjectionMatrix;", + 1, "uniform float fogfactor;", + + 1, "void main() {", + texture, "vTexCoord = gl_MultiTexCoord0.xy;", + lightfog, "vColor = gl_Color * clamp(1.0 + gl_Vertex.z * fogfactor, 0.0, 1.0);", + !lightfog, "vColor = gl_Color;", + 1, "gl_Position = modelViewProjectionMatrix * gl_Vertex;", + 1, "}"), + + stringbuilder( + + 1, "uniform sampler2D myTexture;", + 1, "varying vec4 vColor;", + texture, "varying vec2 vTexCoord;", + 1, "void main() {", + texture, "gl_FragColor = vColor * texture2D(myTexture, vTexCoord);", + !texture, "gl_FragColor = vColor;", + 1, "}" + )); + } + + glEnableClientState(GL_VERTEX_ARRAY); + switch_mode(gmColored); + programs[gmColored]->enable(); + #endif + + #if !CAP_SHADER + switch_mode(gmColored); + #endif + } + + }