1
0
mirror of https://github.com/zenorogue/hyperrogue.git synced 2024-12-19 07:20:25 +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
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); //

View File

@ -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<class... T> 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
}
}