@@ -23,18 +23,21 @@ THE SOFTWARE.
23
23
24
24
#ifdef __APPLE__
25
25
#include < OpenCL/OpenCL.h>
26
- #include < OpenGL/OpenGL.h>
26
+ // #define GLFW_INCLUDE_GL3
27
+ // #define GLFW_NO_GLU
28
+ // #include "GLFW/glfw3.h"
27
29
#elif WIN32
28
30
#define NOMINMAX
29
31
#include < Windows.h>
30
32
#include " GL/glew.h"
33
+ #include " GLFW/glfw3.h"
31
34
#else
32
35
#include < CL/cl.h>
33
36
#include < GL/glew.h>
34
37
#include < GL/glx.h>
38
+ #include " GLFW/glfw3.h"
35
39
#endif
36
40
37
- #include " GLFW/glfw3.h"
38
41
#include " ImGUI/imgui.h"
39
42
#include " ImGUI/imgui_impl_glfw_gl3.h"
40
43
@@ -97,6 +100,7 @@ std::unique_ptr<Baikal::PerspectiveCamera> g_camera;
97
100
GLuint g_vertex_buffer;
98
101
GLuint g_index_buffer;
99
102
GLuint g_texture;
103
+ GLuint g_vao;
100
104
101
105
int g_window_width = 512 ;
102
106
int g_window_height = 512 ;
@@ -131,6 +135,8 @@ Baikal::Renderer::OutputType g_ouput_type = Baikal::Renderer::OutputType::kColor
131
135
132
136
using namespace tinyobj ;
133
137
138
+ #define CHECK_GL_ERROR assert (glGetError() == 0)
139
+
134
140
135
141
struct OutputData
136
142
{
@@ -192,43 +198,50 @@ void Render(GLFWwindow* window)
192
198
try
193
199
{
194
200
{
195
- glDisable (GL_DEPTH_TEST);
196
- glViewport (0 , 0 , g_window_width, g_window_height);
201
+ int w, h;
202
+ glfwGetFramebufferSize (window, &w, &h);CHECK_GL_ERROR;
203
+ glDisable (GL_DEPTH_TEST);CHECK_GL_ERROR;
204
+ glViewport (0 , 0 , w, h);CHECK_GL_ERROR;
205
+
197
206
198
- glClear (GL_COLOR_BUFFER_BIT);
207
+ glClear (GL_COLOR_BUFFER_BIT);CHECK_GL_ERROR;
208
+ glBindVertexArray (g_vao);CHECK_GL_ERROR;
209
+ // glEnableClientState(GL_VERTEX_ARRAY);CHECK_GL_ERROR;
210
+
211
+
199
212
200
- glBindBuffer (GL_ARRAY_BUFFER, g_vertex_buffer);
201
- glBindBuffer (GL_ELEMENT_ARRAY_BUFFER, g_index_buffer);
202
213
203
214
GLuint program = g_shader_manager->GetProgram (" ../App/GLSL/simple" );
204
- glUseProgram (program);
215
+ glUseProgram (program);CHECK_GL_ERROR;
205
216
206
217
GLuint texloc = glGetUniformLocation (program, " g_Texture" );
207
218
assert (texloc >= 0 );
208
219
209
- glUniform1i (texloc, 0 );
220
+ glUniform1i (texloc, 0 );CHECK_GL_ERROR;
210
221
211
- glActiveTexture (GL_TEXTURE0);
212
- glBindTexture (GL_TEXTURE_2D, g_texture);
222
+ glActiveTexture (GL_TEXTURE0);CHECK_GL_ERROR;
223
+ glBindTexture (GL_TEXTURE_2D, g_texture);CHECK_GL_ERROR;
213
224
214
- GLuint position_attr = glGetAttribLocation (program, " inPosition" );
215
- GLuint texcoord_attr = glGetAttribLocation (program, " inTexcoord" );
216
-
217
- glVertexAttribPointer (position_attr, 3 , GL_FLOAT, GL_FALSE, sizeof (float ) * 5 , 0 );
218
- glVertexAttribPointer (texcoord_attr, 2 , GL_FLOAT, GL_FALSE, sizeof (float ) * 5 , (void *)(sizeof (float ) * 3 ));
219
-
220
- glEnableVertexAttribArray (position_attr);
221
- glEnableVertexAttribArray (texcoord_attr);
225
+
226
+ glEnableVertexAttribArray (0 );CHECK_GL_ERROR;
227
+ glEnableVertexAttribArray (1 );CHECK_GL_ERROR;
228
+
229
+ glBindBuffer (GL_ARRAY_BUFFER, g_vertex_buffer);CHECK_GL_ERROR;
230
+ glBindBuffer (GL_ELEMENT_ARRAY_BUFFER, g_index_buffer);CHECK_GL_ERROR;
222
231
232
+ glVertexAttribPointer (0 , 3 , GL_FLOAT, GL_FALSE, sizeof (float ) * 5 , 0 );CHECK_GL_ERROR;
233
+ glVertexAttribPointer (1 , 2 , GL_FLOAT, GL_FALSE, sizeof (float ) * 5 , (void *)(sizeof (float ) * 3 ));CHECK_GL_ERROR;
223
234
glDrawElements (GL_TRIANGLES, 6 , GL_UNSIGNED_SHORT, nullptr );
224
235
225
- glDisableVertexAttribArray (texcoord_attr);
226
- glBindTexture (GL_TEXTURE_2D, 0 );
227
- glBindBuffer (GL_ARRAY_BUFFER, 0 );
228
- glBindBuffer (GL_ELEMENT_ARRAY_BUFFER, 0 );
229
- glUseProgram (0 );
236
+ glDisableVertexAttribArray (0 );CHECK_GL_ERROR;
237
+ glDisableVertexAttribArray (1 );CHECK_GL_ERROR;
238
+ glBindTexture (GL_TEXTURE_2D, 0 );CHECK_GL_ERROR;
239
+ glBindBuffer (GL_ARRAY_BUFFER, 0 );CHECK_GL_ERROR;
240
+ glBindBuffer (GL_ELEMENT_ARRAY_BUFFER, 0 );CHECK_GL_ERROR;
241
+ glUseProgram (0 );CHECK_GL_ERROR;
242
+ glBindVertexArray (0 );
230
243
231
- glFinish ();
244
+ glFinish ();CHECK_GL_ERROR;
232
245
}
233
246
}
234
247
catch (std::runtime_error& e)
@@ -242,17 +255,17 @@ void InitGraphics()
242
255
{
243
256
g_shader_manager.reset (new ShaderManager ());
244
257
245
- glClearColor (0.0 , 0.0 , 0.0 , 0.0 );
246
- glCullFace (GL_NONE);
247
- glDisable (GL_DEPTH_TEST);
248
- glEnable (GL_TEXTURE_2D);
258
+ glClearColor (0.0 , 0.5 , 0.0 , 0.0 );CHECK_GL_ERROR;
259
+ glDisable (GL_DEPTH_TEST);CHECK_GL_ERROR;
249
260
250
- glGenBuffers (1 , &g_vertex_buffer);
251
- glGenBuffers (1 , &g_index_buffer);
261
+ glGenBuffers (1 , &g_vertex_buffer);CHECK_GL_ERROR;
262
+ glGenBuffers (1 , &g_index_buffer);CHECK_GL_ERROR;
263
+
264
+ glGenVertexArrays (1 , &g_vao);CHECK_GL_ERROR;
252
265
253
266
// create Vertex buffer
254
- glBindBuffer (GL_ARRAY_BUFFER, g_vertex_buffer);
255
- glBindBuffer (GL_ELEMENT_ARRAY_BUFFER, g_index_buffer);
267
+ glBindBuffer (GL_ARRAY_BUFFER, g_vertex_buffer);CHECK_GL_ERROR;
268
+ glBindBuffer (GL_ELEMENT_ARRAY_BUFFER, g_index_buffer);CHECK_GL_ERROR;
256
269
257
270
float quad_vdata[] =
258
271
{
@@ -269,21 +282,21 @@ void InitGraphics()
269
282
};
270
283
271
284
// fill data
272
- glBufferData (GL_ARRAY_BUFFER, sizeof (quad_vdata), quad_vdata, GL_STATIC_DRAW);
273
- glBufferData (GL_ELEMENT_ARRAY_BUFFER, sizeof (quad_idata), quad_idata, GL_STATIC_DRAW);
285
+ glBufferData (GL_ARRAY_BUFFER, sizeof (quad_vdata), quad_vdata, GL_STATIC_DRAW);CHECK_GL_ERROR;
286
+ glBufferData (GL_ELEMENT_ARRAY_BUFFER, sizeof (quad_idata), quad_idata, GL_STATIC_DRAW);CHECK_GL_ERROR;
274
287
275
- glBindBuffer (GL_ARRAY_BUFFER, 0 );
276
- glBindBuffer (GL_ELEMENT_ARRAY_BUFFER, 0 );
288
+ glBindBuffer (GL_ARRAY_BUFFER, 0 );CHECK_GL_ERROR;
289
+ glBindBuffer (GL_ELEMENT_ARRAY_BUFFER, 0 );CHECK_GL_ERROR;
277
290
278
291
279
- glGenTextures (1 , &g_texture);
280
- glBindTexture (GL_TEXTURE_2D, g_texture);
281
- glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
282
- glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
292
+ glGenTextures (1 , &g_texture);CHECK_GL_ERROR;
293
+ glBindTexture (GL_TEXTURE_2D, g_texture);CHECK_GL_ERROR;
294
+ glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);CHECK_GL_ERROR;
295
+ glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);CHECK_GL_ERROR;
283
296
284
- glTexImage2D (GL_TEXTURE_2D, 0 , GL_RGBA, g_window_width, g_window_height, 0 , GL_RGBA, GL_UNSIGNED_BYTE, nullptr );
297
+ glTexImage2D (GL_TEXTURE_2D, 0 , GL_RGBA, g_window_width, g_window_height, 0 , GL_RGBA, GL_UNSIGNED_BYTE, nullptr );CHECK_GL_ERROR;
285
298
286
- glBindTexture (GL_TEXTURE_2D, 0 );
299
+ glBindTexture (GL_TEXTURE_2D, 0 );CHECK_GL_ERROR;
287
300
}
288
301
289
302
void InitCl ()
@@ -1070,20 +1083,20 @@ int main(int argc, char * argv[])
1070
1083
// Initialize GLFW
1071
1084
{
1072
1085
auto err = glfwInit ();
1073
- if (err != GLFW_TRUE )
1086
+ if (err != GL_TRUE )
1074
1087
{
1075
1088
std::cout << " GLFW initialization failed\n " ;
1076
1089
return -1 ;
1077
1090
}
1078
1091
}
1079
1092
// Setup window
1080
- // glfwSetErrorCallback(OnError);
1081
- // glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
1082
- // glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
1083
- // glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
1084
- // #if __APPLE__
1085
- // glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
1086
- // #endif
1093
+ glfwSetErrorCallback (OnError);
1094
+ glfwWindowHint (GLFW_CONTEXT_VERSION_MAJOR, 3 );
1095
+ glfwWindowHint (GLFW_CONTEXT_VERSION_MINOR, 3 );
1096
+ glfwWindowHint (GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
1097
+ #if __APPLE__
1098
+ glfwWindowHint (GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
1099
+ #endif
1087
1100
1088
1101
// GLUT Window Initialization:
1089
1102
GLFWwindow* window = glfwCreateWindow (g_window_width, g_window_height, " Baikal standalone demo" , nullptr , nullptr );
0 commit comments