diff --git a/examples/protonect/src/flextGL.c b/examples/protonect/src/flextGL.c index a462628b3..e42652e9c 100644 --- a/examples/protonect/src/flextGL.c +++ b/examples/protonect/src/flextGL.c @@ -24,8 +24,8 @@ int flextInit(GLFWwindow* window, OpenGLBindings *bindings) /* --- Check for minimal version and profile --- */ - if (major * 10 + minor < 33) { - fprintf(stderr, "Error: OpenGL version 3.3 not supported.\n"); + if (major * 10 + minor < 31) { + fprintf(stderr, "Error: OpenGL version 3.1 not supported.\n"); fprintf(stderr, " Your version is %d.%d.\n", major, minor); fprintf(stderr, " Try updating your graphics driver.\n"); return GL_FALSE; @@ -306,7 +306,7 @@ void flextLoadOpenGLFunctions(OpenGLBindings *bindings) bindings->glUniformBlockBinding = (PFNGLUNIFORMBLOCKBINDING_PROC*)glfwGetProcAddress("glUniformBlockBinding"); /* GL_VERSION_3_2 */ - +/* bindings->glDrawElementsBaseVertex = (PFNGLDRAWELEMENTSBASEVERTEX_PROC*)glfwGetProcAddress("glDrawElementsBaseVertex"); bindings->glDrawRangeElementsBaseVertex = (PFNGLDRAWRANGEELEMENTSBASEVERTEX_PROC*)glfwGetProcAddress("glDrawRangeElementsBaseVertex"); bindings->glDrawElementsInstancedBaseVertex = (PFNGLDRAWELEMENTSINSTANCEDBASEVERTEX_PROC*)glfwGetProcAddress("glDrawElementsInstancedBaseVertex"); @@ -326,9 +326,9 @@ void flextLoadOpenGLFunctions(OpenGLBindings *bindings) bindings->glTexImage3DMultisample = (PFNGLTEXIMAGE3DMULTISAMPLE_PROC*)glfwGetProcAddress("glTexImage3DMultisample"); bindings->glGetMultisamplefv = (PFNGLGETMULTISAMPLEFV_PROC*)glfwGetProcAddress("glGetMultisamplefv"); bindings->glSampleMaski = (PFNGLSAMPLEMASKI_PROC*)glfwGetProcAddress("glSampleMaski"); - +*/ /* GL_VERSION_3_3 */ - +/* bindings->glBindFragDataLocationIndexed = (PFNGLBINDFRAGDATALOCATIONINDEXED_PROC*)glfwGetProcAddress("glBindFragDataLocationIndexed"); bindings->glGetFragDataIndex = (PFNGLGETFRAGDATAINDEX_PROC*)glfwGetProcAddress("glGetFragDataIndex"); bindings->glGenSamplers = (PFNGLGENSAMPLERS_PROC*)glfwGetProcAddress("glGenSamplers"); @@ -357,7 +357,7 @@ void flextLoadOpenGLFunctions(OpenGLBindings *bindings) bindings->glVertexAttribP3uiv = (PFNGLVERTEXATTRIBP3UIV_PROC*)glfwGetProcAddress("glVertexAttribP3uiv"); bindings->glVertexAttribP4ui = (PFNGLVERTEXATTRIBP4UI_PROC*)glfwGetProcAddress("glVertexAttribP4ui"); bindings->glVertexAttribP4uiv = (PFNGLVERTEXATTRIBP4UIV_PROC*)glfwGetProcAddress("glVertexAttribP4uiv"); - +*/ } /* ----------------------- Extension flag definitions ---------------------- */ diff --git a/examples/protonect/src/flextGL.h b/examples/protonect/src/flextGL.h index 3da3d1c9c..2cb5cb310 100644 --- a/examples/protonect/src/flextGL.h +++ b/examples/protonect/src/flextGL.h @@ -841,7 +841,7 @@ typedef struct __GLsync *GLsync; #define GL_INVALID_INDEX 0xFFFFFFFFu /* GL_VERSION_3_2 */ - +/* #define GL_CONTEXT_CORE_PROFILE_BIT 0x00000001 #define GL_CONTEXT_COMPATIBILITY_PROFILE_BIT 0x00000002 #define GL_LINES_ADJACENCY 0x000A @@ -906,9 +906,9 @@ typedef struct __GLsync *GLsync; #define GL_MAX_COLOR_TEXTURE_SAMPLES 0x910E #define GL_MAX_DEPTH_TEXTURE_SAMPLES 0x910F #define GL_MAX_INTEGER_SAMPLES 0x9110 - +*/ /* GL_VERSION_3_3 */ - +/* #define GL_VERTEX_ATTRIB_ARRAY_DIVISOR 0x88FE #define GL_SRC1_COLOR 0x88F9 #define GL_ONE_MINUS_SRC1_COLOR 0x88FA @@ -925,7 +925,7 @@ typedef struct __GLsync *GLsync; #define GL_TIME_ELAPSED 0x88BF #define GL_TIMESTAMP 0x8E28 #define GL_INT_2_10_10_10_REV 0x8D9F - +*/ /* --------------------------- FUNCTION PROTOTYPES --------------------------- */ @@ -1258,7 +1258,7 @@ typedef void (APIENTRY PFNGLGETACTIVEUNIFORMBLOCKNAME_PROC (GLuint program, GLui typedef void (APIENTRY PFNGLUNIFORMBLOCKBINDING_PROC (GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding)); /* GL_VERSION_3_2 */ - +/* typedef void (APIENTRY PFNGLDRAWELEMENTSBASEVERTEX_PROC (GLenum mode, GLsizei count, GLenum type, const void * indices, GLint basevertex)); typedef void (APIENTRY PFNGLDRAWRANGEELEMENTSBASEVERTEX_PROC (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void * indices, GLint basevertex)); typedef void (APIENTRY PFNGLDRAWELEMENTSINSTANCEDBASEVERTEX_PROC (GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei instancecount, GLint basevertex)); @@ -1278,9 +1278,9 @@ typedef void (APIENTRY PFNGLTEXIMAGE2DMULTISAMPLE_PROC (GLenum target, GLsizei s typedef void (APIENTRY PFNGLTEXIMAGE3DMULTISAMPLE_PROC (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations)); typedef void (APIENTRY PFNGLGETMULTISAMPLEFV_PROC (GLenum pname, GLuint index, GLfloat * val)); typedef void (APIENTRY PFNGLSAMPLEMASKI_PROC (GLuint maskNumber, GLbitfield mask)); - +*/ /* GL_VERSION_3_3 */ - +/* typedef void (APIENTRY PFNGLBINDFRAGDATALOCATIONINDEXED_PROC (GLuint program, GLuint colorNumber, GLuint index, const GLchar * name)); typedef GLint (APIENTRY PFNGLGETFRAGDATAINDEX_PROC (GLuint program, const GLchar * name)); typedef void (APIENTRY PFNGLGENSAMPLERS_PROC (GLsizei count, GLuint * samplers)); @@ -1309,7 +1309,7 @@ typedef void (APIENTRY PFNGLVERTEXATTRIBP3UI_PROC (GLuint index, GLenum type, GL typedef void (APIENTRY PFNGLVERTEXATTRIBP3UIV_PROC (GLuint index, GLenum type, GLboolean normalized, const GLuint * value)); typedef void (APIENTRY PFNGLVERTEXATTRIBP4UI_PROC (GLuint index, GLenum type, GLboolean normalized, GLuint value)); typedef void (APIENTRY PFNGLVERTEXATTRIBP4UIV_PROC (GLuint index, GLenum type, GLboolean normalized, const GLuint * value)); - +*/ struct OpenGLBindings { @@ -1574,7 +1574,7 @@ struct OpenGLBindings PFNGLUNIFORMBLOCKBINDING_PROC* glUniformBlockBinding; /* GL_VERSION_3_2 */ - +/* PFNGLDRAWELEMENTSBASEVERTEX_PROC* glDrawElementsBaseVertex; PFNGLDRAWRANGEELEMENTSBASEVERTEX_PROC* glDrawRangeElementsBaseVertex; PFNGLDRAWELEMENTSINSTANCEDBASEVERTEX_PROC* glDrawElementsInstancedBaseVertex; @@ -1594,9 +1594,9 @@ struct OpenGLBindings PFNGLTEXIMAGE3DMULTISAMPLE_PROC* glTexImage3DMultisample; PFNGLGETMULTISAMPLEFV_PROC* glGetMultisamplefv; PFNGLSAMPLEMASKI_PROC* glSampleMaski; - +*/ /* GL_VERSION_3_3 */ - +/* PFNGLBINDFRAGDATALOCATIONINDEXED_PROC* glBindFragDataLocationIndexed; PFNGLGETFRAGDATAINDEX_PROC* glGetFragDataIndex; PFNGLGENSAMPLERS_PROC* glGenSamplers; @@ -1625,6 +1625,7 @@ struct OpenGLBindings PFNGLVERTEXATTRIBP3UIV_PROC* glVertexAttribP3uiv; PFNGLVERTEXATTRIBP4UI_PROC* glVertexAttribP4ui; PFNGLVERTEXATTRIBP4UIV_PROC* glVertexAttribP4uiv; +*/ }; typedef struct OpenGLBindings OpenGLBindings; diff --git a/examples/protonect/src/opengl_depth_packet_processor.cpp b/examples/protonect/src/opengl_depth_packet_processor.cpp index 00069ddde..d1b4e239e 100644 --- a/examples/protonect/src/opengl_depth_packet_processor.cpp +++ b/examples/protonect/src/opengl_depth_packet_processor.cpp @@ -32,7 +32,8 @@ #include #include - +#include +#include #include @@ -117,6 +118,8 @@ bool loadBufferFromFile(const std::string& filename, unsigned char *buffer, size struct ShaderProgram : public WithOpenGLBindings { + typedef std::map FragDataMap; + FragDataMap frag_data_map_; GLuint program, vertex_shader, fragment_shader; char error_buffer[2048]; @@ -144,6 +147,11 @@ struct ShaderProgram : public WithOpenGLBindings gl()->glShaderSource(fragment_shader, 1, &src_, &length_); } + void bindFragDataLocation(const std::string &name, int output) + { + frag_data_map_[name] = output; + } + void build() { GLint status; @@ -174,6 +182,11 @@ struct ShaderProgram : public WithOpenGLBindings gl()->glAttachShader(program, vertex_shader); gl()->glAttachShader(program, fragment_shader); + for(FragDataMap::iterator it = frag_data_map_.begin(); it != frag_data_map_.end(); ++it) + { + gl()->glBindFragDataLocation(program, it->second, it->first.c_str()); + } + gl()->glLinkProgram(program); gl()->glGetProgramiv(program, GL_LINK_STATUS, &status); @@ -471,7 +484,7 @@ struct OpenGLDepthPacketProcessorImpl : public WithOpenGLBindings OpenGLBindings *b = new OpenGLBindings(); if (flextInit(opengl_context_ptr, b) == 0) { - std::cerr << "[OpenGLDepthPacketProcessor] Failed to initialize flextGL."; + std::cerr << "[OpenGLDepthPacketProcessor] Failed to initialize flextGL!"<glBindBuffer(GL_ARRAY_BUFFER, square_vbo); gl()->glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW); - GLint position_attr = stage1.getAttributeLocation("Position"); + GLint position_attr = stage1.getAttributeLocation("InputPosition"); gl()->glVertexAttribPointer(position_attr, 2, GL_FLOAT, GL_FALSE, sizeof(Vertex), (GLvoid*)0); gl()->glEnableVertexAttribArray(position_attr); - GLint texcoord_attr = stage1.getAttributeLocation("TexCoord"); + GLint texcoord_attr = stage1.getAttributeLocation("InputTexCoord"); gl()->glVertexAttribPointer(texcoord_attr, 2, GL_FLOAT, GL_FALSE, sizeof(Vertex), (GLvoid*)(2 * sizeof(float))); gl()->glEnableVertexAttribArray(texcoord_attr); } @@ -774,25 +802,25 @@ OpenGLDepthPacketProcessor::OpenGLDepthPacketProcessor(void *parent_opengl_conte // init glfw - if already initialized nothing happens if (glfwInit() == GL_FALSE) { - std::cerr << "[OpenGLDepthPacketProcessor] Failed to initialize GLFW."; + std::cerr << "[OpenGLDepthPacketProcessor] Failed to initialize GLFW." << std::endl; exit(-1); } // setup context glfwDefaultWindowHints(); glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); - glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); + glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 1); #ifdef __APPLE__ glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); #endif - glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); + glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_ANY_PROFILE); glfwWindowHint(GLFW_VISIBLE, debug ? GL_TRUE : GL_FALSE); GLFWwindow* window = glfwCreateWindow(1024, 848, "OpenGLDepthPacketProcessor", 0, parent_window); if (window == NULL) { - std::cerr << "[OpenGLDepthPacketProcessor] Failed to create opengl window."; + std::cerr << "[OpenGLDepthPacketProcessor] Failed to create opengl window." << std::endl; exit(-1); } diff --git a/examples/protonect/src/shader/debug.fs b/examples/protonect/src/shader/debug.fs index 34dac1298..f7fce5b49 100644 --- a/examples/protonect/src/shader/debug.fs +++ b/examples/protonect/src/shader/debug.fs @@ -1,16 +1,14 @@ -#version 330 +#version 140 uniform sampler2DRect Data; -in VertexData { - vec2 TexCoord; -} FragmentIn; +in vec2 TexCoord; -layout(location = 0) out vec4 Color; +out vec4 Color; void main(void) { - ivec2 uv = ivec2(FragmentIn.TexCoord.x, FragmentIn.TexCoord.y); + ivec2 uv = ivec2(TexCoord.x, TexCoord.y); Color = texelFetch(Data, uv); } \ No newline at end of file diff --git a/examples/protonect/src/shader/default.vs b/examples/protonect/src/shader/default.vs index 8cb838b5a..62e0b8408 100644 --- a/examples/protonect/src/shader/default.vs +++ b/examples/protonect/src/shader/default.vs @@ -1,14 +1,12 @@ -#version 330 +#version 140 -in vec2 Position; -in vec2 TexCoord; +in vec2 InputPosition; +in vec2 InputTexCoord; -out VertexData { - vec2 TexCoord; -} VertexOut; +out vec2 TexCoord; void main(void) { - gl_Position = vec4(Position, 0.0, 1.0); - VertexOut.TexCoord = TexCoord; + gl_Position = vec4(InputPosition, 0.0, 1.0); + TexCoord = InputTexCoord; } \ No newline at end of file diff --git a/examples/protonect/src/shader/filter1.fs b/examples/protonect/src/shader/filter1.fs index 2fb526f6b..d83308b90 100644 --- a/examples/protonect/src/shader/filter1.fs +++ b/examples/protonect/src/shader/filter1.fs @@ -1,4 +1,4 @@ -#version 330 +#version 140 struct Parameters { @@ -40,14 +40,12 @@ uniform sampler2DRect Norm; uniform Parameters Params; -in VertexData { - vec2 TexCoord; -} FragmentIn; +in vec2 TexCoord; -layout(location = 0) out vec4 Debug; -layout(location = 1) out vec3 FilterA; -layout(location = 2) out vec3 FilterB; -layout(location = 3) out uint MaxEdgeTest; +/*layout(location = 0)*/ out vec4 Debug; +/*layout(location = 1)*/ out vec3 FilterA; +/*layout(location = 2)*/ out vec3 FilterB; +/*layout(location = 3)*/ out uint MaxEdgeTest; void applyBilateralFilter(ivec2 uv) { @@ -115,7 +113,7 @@ void applyBilateralFilter(ivec2 uv) void main(void) { - ivec2 uv = ivec2(FragmentIn.TexCoord.x, FragmentIn.TexCoord.y); + ivec2 uv = ivec2(TexCoord.x, TexCoord.y); applyBilateralFilter(uv); diff --git a/examples/protonect/src/shader/filter2.fs b/examples/protonect/src/shader/filter2.fs index 03355e4a7..f7c83c8f3 100644 --- a/examples/protonect/src/shader/filter2.fs +++ b/examples/protonect/src/shader/filter2.fs @@ -1,4 +1,4 @@ -#version 330 +#version 140 struct Parameters { @@ -39,12 +39,10 @@ uniform usampler2DRect MaxEdgeTest; uniform Parameters Params; -in VertexData { - vec2 TexCoord; -} FragmentIn; +in vec2 TexCoord; -layout(location = 0) out vec4 Debug; -layout(location = 1) out float FilterDepth; +/*layout(location = 0)*/ out vec4 Debug; +/*layout(location = 1)*/ out float FilterDepth; void applyEdgeAwareFilter(ivec2 uv) { @@ -126,7 +124,7 @@ void applyEdgeAwareFilter(ivec2 uv) void main(void) { - ivec2 uv = ivec2(FragmentIn.TexCoord.x, FragmentIn.TexCoord.y); + ivec2 uv = ivec2(TexCoord.x, TexCoord.y); applyEdgeAwareFilter(uv); diff --git a/examples/protonect/src/shader/stage1.fs b/examples/protonect/src/shader/stage1.fs index d2fcd0e78..42d6d5c58 100644 --- a/examples/protonect/src/shader/stage1.fs +++ b/examples/protonect/src/shader/stage1.fs @@ -1,4 +1,4 @@ -#version 330 +#version 140 struct Parameters { @@ -43,16 +43,14 @@ uniform sampler2DRect ZTable; uniform Parameters Params; -in VertexData { - vec2 TexCoord; -} FragmentIn; +in vec2 TexCoord; -layout(location = 0) out vec4 Debug; - -layout(location = 1) out vec3 A; -layout(location = 2) out vec3 B; -layout(location = 3) out vec3 Norm; -layout(location = 4) out float Infrared; +/*layout(location = 0)*/ out vec4 Debug; +/* */ +/*layout(location = 1)*/ out vec3 A; +/*layout(location = 2)*/ out vec3 B; +/*layout(location = 3)*/ out vec3 Norm; +/*layout(location = 4)*/ out float Infrared; #define M_PI 3.1415926535897932384626433832795 @@ -97,7 +95,7 @@ vec2 processMeasurementTriple(in ivec2 uv, in usampler2DRect p0table, in int off void main(void) { - ivec2 uv = ivec2(FragmentIn.TexCoord.x, FragmentIn.TexCoord.y); + ivec2 uv = ivec2(TexCoord.x, TexCoord.y); bool valid_pixel = 0.0 < texelFetch(ZTable, uv).x; bvec3 saturated = bvec3(valid_pixel); diff --git a/examples/protonect/src/shader/stage2.fs b/examples/protonect/src/shader/stage2.fs index a06c28f13..12ee8d289 100644 --- a/examples/protonect/src/shader/stage2.fs +++ b/examples/protonect/src/shader/stage2.fs @@ -1,4 +1,4 @@ -#version 330 +#version 140 struct Parameters { @@ -41,19 +41,17 @@ uniform sampler2DRect ZTable; uniform Parameters Params; -in VertexData { - vec2 TexCoord; -} FragmentIn; +in vec2 TexCoord; -layout(location = 0) out vec4 Debug; -layout(location = 1) out float Depth; -layout(location = 2) out vec2 DepthAndIrSum; +/*layout(location = 0)*/ out vec4 Debug; +/*layout(location = 1)*/ out float Depth; +/*layout(location = 2)*/ out vec2 DepthAndIrSum; #define M_PI 3.1415926535897932384626433832795 void main(void) { - ivec2 uv = ivec2(FragmentIn.TexCoord.x, FragmentIn.TexCoord.y); + ivec2 uv = ivec2(TexCoord.x, TexCoord.y); vec3 a = texelFetch(A, uv).xyz; vec3 b = texelFetch(B, uv).xyz;