aboutsummaryrefslogtreecommitdiff
path: root/src/main.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.cpp')
-rw-r--r--src/main.cpp128
1 files changed, 90 insertions, 38 deletions
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<f32> vertices(verticesRaw, 6);
+ DeviceMemory triangle;
+ triangle.copyAsStatic(vertices);
+
+ CompiledVertexShader *vertexShader = createVertexShader();
+ CompiledPixelShader *pixelShader = createPixelShader();
+
+ ShaderProgram shaderProgram;
+ shaderProgram.addVertexShader(vertexShader);
+ shaderProgram.addPixelShader(pixelShader);
+ Result<bool> 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<f32> 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*> 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*> 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();
}