From b5f06b6c4cd07f3073897af32626b9b21a4d2ef8 Mon Sep 17 00:00:00 2001 From: dec05eba Date: Fri, 22 Dec 2017 17:34:55 +0100 Subject: Fix vertex and pixel shader Remove pixel shader code from shader program --- src/main.cpp | 128 +++++++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 90 insertions(+), 38 deletions(-) (limited to 'src/main.cpp') diff --git a/src/main.cpp b/src/main.cpp index 03222f1..b1a0d62 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -10,12 +10,61 @@ using namespace amalgine; using namespace std; +void initGlfw(); +void initGlew(); +GLFWwindow *createWindow(); + +CompiledVertexShader* createVertexShader(); +CompiledPixelShader* createPixelShader(); + int main() +{ + initGlfw(); + GLFWwindow *window = createWindow(); + + f32 verticesRaw[] = + { + 0.0f, 0.5f, + 0.5f, -0.5f, + -0.5f, -0.5f + }; + DataView vertices(verticesRaw, 6); + DeviceMemory triangle; + triangle.copyAsStatic(vertices); + + CompiledVertexShader *vertexShader = createVertexShader(); + CompiledPixelShader *pixelShader = createPixelShader(); + + ShaderProgram shaderProgram; + shaderProgram.addVertexShader(vertexShader); + shaderProgram.addPixelShader(pixelShader); + Result shaderBuildResult = shaderProgram.build(); + if(!shaderBuildResult) + { + fprintf(stderr, "Failed to build shader program: %s\n", shaderBuildResult.getErrorMsg().c_str()); + exit(20); + } + + while(!glfwWindowShouldClose(window)) + { + glfwPollEvents(); + if(glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS) + glfwSetWindowShouldClose(window, GL_TRUE); + + shaderProgram.use(); + glfwSwapBuffers(window); + } + + glfwTerminate(); + return 0; +} + +void initGlfw() { if(!glfwInit()) { fprintf(stderr, "Failed to initialize GLFW\n"); - return -1; + exit(-1); } glfwWindowHint(GLFW_SAMPLES, 4); @@ -24,39 +73,37 @@ int main() glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); glfwWindowHint(GLFW_RESIZABLE, GL_FALSE); +} - GLFWwindow *window = glfwCreateWindow(1920, 1080, "Amalgine", nullptr, nullptr); - if(!window) +void initGlew() +{ + glewExperimental = true; + if(glewInit() != GLEW_OK) { - fprintf(stderr, "Failed to open GLFW window\n"); + fprintf(stderr, "Failed to initialize GLEW\n"); glfwTerminate(); - return -1; + exit(-1); } +} - glfwMakeContextCurrent(window); - glewExperimental = true; - if(glewInit() != GLEW_OK) +GLFWwindow* createWindow() +{ + GLFWwindow *window = glfwCreateWindow(1280, 720, "Amalgine", nullptr, nullptr); + if(!window) { - fprintf(stderr, "Failed to initialize GLEW\n"); + fprintf(stderr, "Failed to open GLFW window\n"); glfwTerminate(); - return -1; + exit(10); } glfwSetInputMode(window, GLFW_STICKY_KEYS, GL_TRUE); - - - f32 verticesRaw[] = - { - 0.0f, 0.5f, - 0.5f, -0.5f, - -0.5f, -0.5f - }; - DataView vertices(verticesRaw, 6); - DeviceMemory triangle; - triangle.copyStatic(vertices); - - ShaderProgram shaderProgram; - + glfwMakeContextCurrent(window); + initGlew(); + return window; +} + +CompiledVertexShader* createVertexShader() +{ VertexShader vertexShader; ShaderInputVec2 inputPosition = vertexShader.defineInputVec2("position"); @@ -65,27 +112,32 @@ int main() return ShaderVec4(inputPosition, 0.0f, 1.0f); }); + Result compiledVertexShader = vertexShader.compile(); + if(!compiledVertexShader) + { + fprintf(stderr, "Failed to compile vertex shader:\n%s", compiledVertexShader.getErrorMsg().c_str()); + exit(2); + } + + return compiledVertexShader.unwrap(); +} + +CompiledPixelShader* createPixelShader() +{ PixelShader pixelShader; - ShaderOutputVec4 outColor = shaderProgram.defineOutputVec4("outColor"); + ShaderOutputVec4 outColor = pixelShader.defineOutputVec4("outColor"); pixelShader.defineMain([&outColor]() { outColor = ShaderVec4(1.0f, 1.0f, 1.0f, 1.0f); }); - string vertexShaderSource = vertexShader.build(); - printf("Vertex shader source:\n%s", vertexShaderSource.c_str()); - string pixelShaderSource = pixelShader.build(); - printf("Pixel shader source:\n%s", pixelShaderSource.c_str()); - - while(!glfwWindowShouldClose(window)) + Result compiledPixelShader = pixelShader.compile(); + if(!compiledPixelShader) { - if(glfwGetKey(window, GLFW_KEY_ESCAPE) != GLFW_PRESS) - glfwSetWindowShouldClose(window, GL_TRUE); - - glfwSwapBuffers(window); - glfwPollEvents(); + fprintf(stderr, "Failed to compile pixel shader:\n%s", compiledPixelShader.getErrorMsg().c_str()); + exit(2); } - - return 0; + + return compiledPixelShader.unwrap(); } -- cgit v1.2.3