1
0
mirror of https://github.com/zenorogue/hyperrogue.git synced 2024-12-19 15:20:27 +00:00

made CAP_SHADERF work in Windows

This commit is contained in:
Zeno Rogue 2018-02-10 15:18:44 +01:00
parent 6846604c27
commit bfd17a57c6
2 changed files with 70 additions and 65 deletions

View File

@ -29,8 +29,6 @@ GLAPI void APIENTRY glDeleteFramebuffers (GLsizei n, const GLuint *framebuffers)
#endif #endif
#endif #endif
bool glew = false;
renderbuffer::renderbuffer(int x, int y, bool gl) : x(x), y(y) { renderbuffer::renderbuffer(int x, int y, bool gl) : x(x), y(y) {
valid = false; valid = false;
@ -47,16 +45,6 @@ renderbuffer::renderbuffer(int x, int y, bool gl) : x(x), y(y) {
if(gl) { if(gl) {
tx = next_p2(x); tx = next_p2(x);
ty = next_p2(y); 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; FramebufferName = renderedTexture = depth_stencil_rb = 0;
glGenFramebuffers(1, &FramebufferName); // glGenFramebuffers(1, &FramebufferName); //

View File

@ -4,9 +4,6 @@
// Copyright (C) 2011-2018 Zeno Rogue, see 'hyper.cpp' for details // 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) { void glError(const char* GLcall, const char* file, const int line) {
GLenum errCode = glGetError(); GLenum errCode = glGetError();
if(errCode!=GL_NO_ERROR) { if(errCode!=GL_NO_ERROR) {
@ -16,6 +13,8 @@ void glError(const char* GLcall, const char* file, const int line) {
namespace glhr { namespace glhr {
bool glew = false;
enum eMode { gmColored, gmTextured, gmVarColored, gmLightFog, gmMAX}; enum eMode { gmColored, gmTextured, gmVarColored, gmLightFog, gmMAX};
static const flagtype GF_TEXTURE = 1; static const flagtype GF_TEXTURE = 1;
@ -128,10 +127,6 @@ void set_modelview(const glmatrix& m) {
glLoadMatrixf(m.as_array()); glLoadMatrixf(m.as_array());
} }
void init() {
glEnableClientState(GL_VERTEX_ARRAY);
}
#endif #endif
// /* shaders */ // /* shaders */
@ -161,7 +156,7 @@ void init();
int compileShader(int type, const string& s) { int compileShader(int type, const string& s) {
GLint status; GLint status;
printf("===\ns%s\n===\n", s.c_str()); // printf("===\ns%s\n===\n", s.c_str());
GLint shader = glCreateShader(type); GLint shader = glCreateShader(type);
const char *ss = s.c_str(); const char *ss = s.c_str();
@ -205,7 +200,7 @@ struct GLprogram {
GLprogram(string vsh, string fsh) { GLprogram(string vsh, string fsh) {
_program = glCreateProgram(); _program = glCreateProgram();
printf("creating program %d\n", _program); // printf("creating program %d\n", _program);
vertShader = compileShader(GL_VERTEX_SHADER, vsh.c_str()); vertShader = compileShader(GL_VERTEX_SHADER, vsh.c_str());
fragShader = compileShader(GL_FRAGMENT_SHADER, fsh.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_MODELVIEWPROJECTION_MATRIX] = glGetUniformLocation(_program, "modelViewProjectionMatrix");
uniforms[UNIFORM_FOGFACTOR] = glGetUniformLocation(_program, "fogfactor"); 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() { ~GLprogram() {
@ -266,49 +261,6 @@ template<class... T> string stringbuilder(bool i, const string& s, T... t) {
else return stringbuilder(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) { void set_modelview(const glmatrix& modelview) {
glmatrix mvp = modelview * projection; glmatrix mvp = modelview * projection;
glUniformMatrix4fv(current->uniforms[UNIFORM_MODELVIEWPROJECTION_MATRIX], 1, 0, mvp.as_array()); glUniformMatrix4fv(current->uniforms[UNIFORM_MODELVIEWPROJECTION_MATRIX], 1, 0, mvp.as_array());
@ -408,4 +360,69 @@ void fog_max(ld fogmax) {
#endif #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
}
} }