Skip to content

Commit 2cee7df

Browse files
committed
opengl: Fix OpenGL 3.1 support on Windows
Properly check version and report error in the viewer. In OpenGL processor, FBOs must have read buffer properly set up. It's possible viewer's shader version 330 needs to be ported to version 140, but no bugs were encountered at the moment.
1 parent 95c09aa commit 2cee7df

File tree

2 files changed

+34
-11
lines changed

2 files changed

+34
-11
lines changed

examples/viewer.cpp

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
#include "viewer.h"
2+
#include <cstdlib>
23

34
Viewer::Viewer() : shader_folder("src/shader/")
45
{
@@ -7,19 +8,37 @@ Viewer::Viewer() : shader_folder("src/shader/")
78

89
}
910

11+
static void glfwErrorCallback(int error, const char* description)
12+
{
13+
std::cerr << "GLFW error " << error << " " << description << std::endl;
14+
}
15+
1016
void Viewer::initialize()
1117
{
18+
GLFWerrorfun prev_func = glfwSetErrorCallback(glfwErrorCallback);
19+
if (prev_func)
20+
glfwSetErrorCallback(prev_func);
21+
1222
// setup context
1323
glfwDefaultWindowHints();
1424
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
15-
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
1625
#ifdef __APPLE__
26+
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
1727
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
18-
#endif
1928
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
29+
#else
30+
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 1);
31+
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_ANY_PROFILE);
32+
#endif
2033
//glfwWindowHint(GLFW_VISIBLE, debug ? GL_TRUE : GL_FALSE);
2134

22-
window = glfwCreateWindow(1280, 800, "Viewer", 0, NULL);
35+
window = glfwCreateWindow(1280, 800, "Viewer (press ESC to exit)", 0, NULL);
36+
if (window == NULL)
37+
{
38+
std::cerr << "Failed to create opengl window." << std::endl;
39+
exit(-1);
40+
}
41+
2342
glfwMakeContextCurrent(window);
2443
OpenGLBindings *b = new OpenGLBindings();
2544
flextInit(b);

src/opengl_depth_packet_processor.cpp

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -585,50 +585,54 @@ struct OpenGLDepthPacketProcessorImpl : public WithOpenGLBindings, public WithPe
585585
GLenum debug_attachment = do_debug ? GL_COLOR_ATTACHMENT0 : GL_NONE;
586586

587587
gl()->glGenFramebuffers(1, &stage1_framebuffer);
588-
gl()->glBindFramebuffer(GL_DRAW_FRAMEBUFFER, stage1_framebuffer);
588+
gl()->glBindFramebuffer(GL_FRAMEBUFFER, stage1_framebuffer);
589589

590590
const GLenum stage1_buffers[] = { debug_attachment, GL_COLOR_ATTACHMENT1, GL_COLOR_ATTACHMENT2, GL_COLOR_ATTACHMENT3, GL_COLOR_ATTACHMENT4 };
591591
gl()->glDrawBuffers(5, stage1_buffers);
592+
glReadBuffer(GL_COLOR_ATTACHMENT4);
592593

593594
if(do_debug) gl()->glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_RECTANGLE, stage1_debug.texture, 0);
594595
gl()->glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT1, GL_TEXTURE_RECTANGLE, stage1_data[0].texture, 0);
595596
gl()->glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT2, GL_TEXTURE_RECTANGLE, stage1_data[1].texture, 0);
596597
gl()->glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT3, GL_TEXTURE_RECTANGLE, stage1_data[2].texture, 0);
597598
gl()->glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT4, GL_TEXTURE_RECTANGLE, stage1_infrared.texture, 0);
598-
checkFBO(GL_DRAW_FRAMEBUFFER);
599+
checkFBO(GL_FRAMEBUFFER);
599600

600601
gl()->glGenFramebuffers(1, &filter1_framebuffer);
601-
gl()->glBindFramebuffer(GL_DRAW_FRAMEBUFFER, filter1_framebuffer);
602+
gl()->glBindFramebuffer(GL_FRAMEBUFFER, filter1_framebuffer);
602603

603604
const GLenum filter1_buffers[] = { debug_attachment, GL_COLOR_ATTACHMENT1, GL_COLOR_ATTACHMENT2, GL_COLOR_ATTACHMENT3 };
604605
gl()->glDrawBuffers(4, filter1_buffers);
606+
glReadBuffer(GL_NONE);
605607

606608
if(do_debug) gl()->glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_RECTANGLE, filter1_debug.texture, 0);
607609
gl()->glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT1, GL_TEXTURE_RECTANGLE, filter1_data[0].texture, 0);
608610
gl()->glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT2, GL_TEXTURE_RECTANGLE, filter1_data[1].texture, 0);
609611
gl()->glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT3, GL_TEXTURE_RECTANGLE, filter1_max_edge_test.texture, 0);
610-
checkFBO(GL_DRAW_FRAMEBUFFER);
612+
checkFBO(GL_FRAMEBUFFER);
611613

612614
gl()->glGenFramebuffers(1, &stage2_framebuffer);
613-
gl()->glBindFramebuffer(GL_DRAW_FRAMEBUFFER, stage2_framebuffer);
615+
gl()->glBindFramebuffer(GL_FRAMEBUFFER, stage2_framebuffer);
614616

615617
const GLenum stage2_buffers[] = { debug_attachment, GL_COLOR_ATTACHMENT1, GL_COLOR_ATTACHMENT2 };
616618
gl()->glDrawBuffers(3, stage2_buffers);
619+
glReadBuffer(GL_COLOR_ATTACHMENT1);
617620

618621
if(do_debug) gl()->glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_RECTANGLE, stage2_debug.texture, 0);
619622
gl()->glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT1, GL_TEXTURE_RECTANGLE, stage2_depth.texture, 0);
620623
gl()->glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT2, GL_TEXTURE_RECTANGLE, stage2_depth_and_ir_sum.texture, 0);
621-
checkFBO(GL_DRAW_FRAMEBUFFER);
624+
checkFBO(GL_FRAMEBUFFER);
622625

623626
gl()->glGenFramebuffers(1, &filter2_framebuffer);
624-
gl()->glBindFramebuffer(GL_DRAW_FRAMEBUFFER, filter2_framebuffer);
627+
gl()->glBindFramebuffer(GL_FRAMEBUFFER, filter2_framebuffer);
625628

626629
const GLenum filter2_buffers[] = { debug_attachment, GL_COLOR_ATTACHMENT1 };
627630
gl()->glDrawBuffers(2, filter2_buffers);
631+
glReadBuffer(GL_COLOR_ATTACHMENT1);
628632

629633
if(do_debug) gl()->glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_RECTANGLE, filter2_debug.texture, 0);
630634
gl()->glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT1, GL_TEXTURE_RECTANGLE, filter2_depth.texture, 0);
631-
checkFBO(GL_DRAW_FRAMEBUFFER);
635+
checkFBO(GL_FRAMEBUFFER);
632636

633637
Vertex bl = {-1.0f, -1.0f, 0.0f, 0.0f }, br = { 1.0f, -1.0f, 512.0f, 0.0f }, tl = {-1.0f, 1.0f, 0.0f, 424.0f }, tr = { 1.0f, 1.0f, 512.0f, 424.0f };
634638
Vertex vertices[] = {

0 commit comments

Comments
 (0)