basic program working

This commit is contained in:
2019-07-15 22:55:08 -04:00
parent 7e3abb73f6
commit c03e86cdd3
3 changed files with 125 additions and 18 deletions

View File

@@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 3.13)
set(CMAKE_CXX_STANDARD 17)
add_library(glad vendor/glad/src/glad.c cosets/src/main.cpp)
add_library(glad vendor/glad/src/glad.c)
target_include_directories(glad PUBLIC vendor/glad/include)
option(GLFW_BUILD_DOCS OFF)
@@ -13,13 +13,4 @@ add_subdirectory(vendor/glfw)
option(GLM_TEST_ENABLE OFF)
add_subdirectory(vendor/glm)
set(BOOST_ROOT vendor/boost)
find_package(Boost REQUIRED COMPONENTS format)
if (Boost_FOUND)
message('boost found!')
else()
message('boost not found!')
endif ()
add_subdirectory(cosets)

View File

@@ -3,8 +3,8 @@ project(cosets)
add_executable(${PROJECT_NAME}
src/main.cpp)
target_include_directories(${PROJECT_NAME} PRIVATE
include)
target_link_libraries(${PROJECT_NAME}
PRIVATE glad glm glfw)
target_link_libraries(${PROJECT_NAME} PRIVATE
glad glm glfw)
target_include_directories(${PROJECT_NAME}
PRIVATE include)

View File

@@ -1,9 +1,125 @@
#include <iostream>
#include<glad/glad.h>
#include<GLFW/glfw3.h>
#include<string>
#include<stdio.h>
using namespace std;
int main(int argc, char *argv[]) {
cout << "hello, world!\n";
class Window {
protected:
GLFWwindow *_window = nullptr;
return 0;
public:
virtual void init() {}
virtual void update() {}
virtual void render() {}
virtual void deinit() {}
void getBounds(int &width, int &height) {
glfwGetFramebufferSize(_window, &width, &height);
}
void swapbuffers() {
glfwSwapBuffers(_window);
}
void run() {
int _gl_major = 4, _gl_minor = 0;
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, _gl_major);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, _gl_minor);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
_window = glfwCreateWindow(640, 480, "GLFW App", nullptr, nullptr);
if (!_window) {
fprintf(stderr, "Failed to create window;");
glfwTerminate();
exit(EXIT_FAILURE);
}
glfwMakeContextCurrent(_window);
gladLoadGLLoader((GLADloadproc) glfwGetProcAddress);
glfwSwapInterval(0);
init();
while (!glfwWindowShouldClose(_window)) {
update();
render();
glfwPollEvents();
}
deinit();
glfwDestroyWindow(_window);
}
};
class CosetsWindow : public Window {
GLint program;
GLint build_shader(GLenum type, const string &name, const string &src) {
const char *c_str = src.c_str();
auto s = glCreateShader(type);
glShaderSource(s, 1, &c_str, nullptr);
glCompileShader(s);
GLint stat;
glGetShaderiv(s, GL_COMPILE_STATUS, &stat);
if (!stat) {
GLint log_len;
glGetShaderiv(s, GL_INFO_LOG_LENGTH, &log_len);
char log[log_len];
glGetShaderInfoLog(s, log_len, nullptr, log);
fprintf(stderr, "SHADER LOG (%s):\n%s", name.c_str(), log);
}
return s;
}
public:
void init() override {
auto vs = build_shader(GL_VERTEX_SHADER, "vertex",
"#version 400\n"
""
"void main(){"
" int"
"}");
auto fs = build_shader(GL_FRAGMENT_SHADER, "fragment",
"#version 400\n"
""
"void main(){"
" int"
"}"
);
program = glCreateProgram();
glAttachShader(program, vs);
glAttachShader(program, fs);
glLinkProgram(program);
}
void render() override {
}
};
int main(int argc, char *argv[]) {
if (!glfwInit()) {
fprintf(stderr, "Failed to initialize GLFW\n");
return EXIT_FAILURE;
}
Window *window = new CosetsWindow();
window->run();
glfwTerminate();
return EXIT_SUCCESS;
}