diff --git a/examples/glview/README.md b/examples/glview/README.md index de1f25f..bb6194c 100644 --- a/examples/glview/README.md +++ b/examples/glview/README.md @@ -15,10 +15,15 @@ Simple OpenGL viewer for glTF geometry. > premake4 gmake $ make -### Windows(not tested) +### Windows(not tested well) + +Edit glew and glfw path in `premake4.lua`, then > premake5.exe vs2013 - Open .sln in Visual Studio 2013 + +Open .sln in Visual Studio 2013 + +When running .exe, glew and glfw dll must exist in the working directory. ## TODO diff --git a/examples/glview/glview.cc b/examples/glview/glview.cc index 9fb5632..a9abe16 100644 --- a/examples/glview/glview.cc +++ b/examples/glview/glview.cc @@ -360,12 +360,15 @@ void DrawMesh(tinygltf::Scene &scene, const tinygltf::Mesh &mesh) { if ((it->first.compare("POSITION") == 0) || (it->first.compare("NORMAL") == 0) || (it->first.compare("TEXCOORD_0") == 0)) { - glVertexAttribPointer( - gGLProgramState.attribs[it->first], count, accessor.componentType, - GL_FALSE, accessor.byteStride, BUFFER_OFFSET(accessor.byteOffset)); - CheckErrors("vertex attrib pointer"); - glEnableVertexAttribArray(gGLProgramState.attribs[it->first]); - CheckErrors("enable vertex attrib array"); + + if (gGLProgramState.attribs[it->first] >= 0) { + glVertexAttribPointer( + gGLProgramState.attribs[it->first], count, accessor.componentType, + GL_FALSE, accessor.byteStride, BUFFER_OFFSET(accessor.byteOffset)); + CheckErrors("vertex attrib pointer"); + glEnableVertexAttribArray(gGLProgramState.attribs[it->first]); + CheckErrors("enable vertex attrib array"); + } } } @@ -403,7 +406,9 @@ void DrawMesh(tinygltf::Scene &scene, const tinygltf::Mesh &mesh) { if ((it->first.compare("POSITION") == 0) || (it->first.compare("NORMAL") == 0) || (it->first.compare("TEXCOORD_0") == 0)) { - glDisableVertexAttribArray(gGLProgramState.attribs[it->first]); + if (gGLProgramState.attribs[it->first] >= 0) { + glDisableVertexAttribArray(gGLProgramState.attribs[it->first]); + } } } } @@ -497,7 +502,7 @@ int main(int argc, char **argv) { glfwSetMouseButtonCallback(window, clickFunc); glfwSetCursorPosCallback(window, motionFunc); - glewExperimental = true; + glewExperimental = true; // This may be only true for linux environment. if (glewInit() != GLEW_OK) { std::cerr << "Failed to initialize GLEW." << std::endl; return -1; @@ -523,17 +528,12 @@ int main(int argc, char **argv) { CheckErrors("link"); { + // At least `in_vertex` should be used in the shader. GLint vtxLoc = glGetAttribLocation(progId, "in_vertex"); if (vtxLoc < 0) { printf("vertex loc not found.\n"); exit(-1); } - - GLint tnLoc = glGetAttribLocation(progId, "in_normal"); - if (tnLoc < 0) { - printf("normal loc not found.\n"); - exit(-1); - } } glUseProgram(progId); diff --git a/examples/glview/premake4.lua b/examples/glview/premake4.lua index 773a194..51b4a73 100644 --- a/examples/glview/premake4.lua +++ b/examples/glview/premake4.lua @@ -1,36 +1,41 @@ solution "glview" - -- location ( "build" ) - configurations { "Debug", "Release" } - platforms {"native", "x64", "x32"} - - project "glview" + -- location ( "build" ) + configurations { "Debug", "Release" } + platforms {"native", "x64", "x32"} + + project "glview" - kind "ConsoleApp" - language "C++" - files { "glview.cc", "trackball.cc" } - includedirs { "./" } - includedirs { "../../" } + kind "ConsoleApp" + language "C++" + files { "glview.cc", "trackball.cc" } + includedirs { "./" } + includedirs { "../../" } - configuration { "linux" } - linkoptions { "`pkg-config --libs glfw3`" } - links { "GL", "GLU", "m", "GLEW", "X11", "Xrandr", "Xinerama", "Xi", "Xxf86vm", "Xcursor", "dl" } + configuration { "linux" } + linkoptions { "`pkg-config --libs glfw3`" } + links { "GL", "GLU", "m", "GLEW", "X11", "Xrandr", "Xinerama", "Xi", "Xxf86vm", "Xcursor", "dl" } - configuration { "windows" } - links { "glfw3", "gdi32", "winmm", "user32", "GLEW", "glu32","opengl32", "kernel32" } - defines { "_CRT_SECURE_NO_WARNINGS" } + configuration { "windows" } + -- Edit path to glew and GLFW3 fit to your environment. + includedirs { "../../../../local/glew-1.13.0/include/" } + includedirs { "../../../../local/glfw-3.2.bin.WIN32/include/" } + libdirs { "../../../../local/glew-1.13.0/lib/Release/Win32/" } + libdirs { "../../../../local/glfw-3.2.bin.WIN32/lib-vc2013/" } + links { "glfw3", "gdi32", "winmm", "user32", "glew32", "glu32","opengl32", "kernel32" } + defines { "_CRT_SECURE_NO_WARNINGS" } - configuration { "macosx" } + configuration { "macosx" } includedirs { "/usr/local/include" } buildoptions { "-Wno-deprecated-declarations" } libdirs { "/usr/local/lib" } - links { "glfw3", "GLEW" } - linkoptions { "-framework OpenGL", "-framework Cocoa", "-framework IOKit", "-framework CoreVideo" } + links { "glfw3", "GLEW" } + linkoptions { "-framework OpenGL", "-framework Cocoa", "-framework IOKit", "-framework CoreVideo" } - configuration "Debug" - defines { "DEBUG" } - flags { "Symbols", "ExtraWarnings"} + configuration "Debug" + defines { "DEBUG" } + flags { "Symbols", "ExtraWarnings"} - configuration "Release" - defines { "NDEBUG" } - flags { "Optimize", "ExtraWarnings"} + configuration "Release" + defines { "NDEBUG" } + flags { "Optimize", "ExtraWarnings"}