Browse Source

Uses moggle now

master
Joshua Moerman 11 years ago
parent
commit
9e6a51a844
  1. 3
      .gitignore
  2. 3
      .gitmodules
  3. 1
      contrib/CMakeLists.txt
  4. 1
      contrib/moggle
  5. 2
      src/CMakeLists.txt
  6. 100
      src/main.cpp

3
.gitignore

@ -0,0 +1,3 @@
build*
*.user

3
.gitmodules

@ -7,3 +7,6 @@
[submodule "contrib/ImageStreams"]
path = contrib/ImageStreams
url = ../ImageStreams/
[submodule "contrib/moggle"]
path = contrib/moggle
url = ../moggle/

1
contrib/CMakeLists.txt

@ -2,3 +2,4 @@
add_subdirectory("NSAppWrapper")
add_subdirectory("CLWrapper")
add_subdirectory("ImageStreams")
add_subdirectory("moggle")

1
contrib/moggle

@ -0,0 +1 @@
Subproject commit bb8a9ab41750803845dfc540b183d2647e2da8e8

2
src/CMakeLists.txt

@ -3,7 +3,7 @@ set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
file(GLOB sources "*.cpp")
set(libs ${JCLWrapper_LIBRARIES} ${JNSAppWrapper_LIBRARIES} ${ImageStreams_LIBRARIES})
set(libs ${JCLWrapper_LIBRARIES} ${JNSAppWrapper_LIBRARIES} ${ImageStreams_LIBRARIES} moggle_xxx)
message(STATUS "Linking against the following libraries: ${libs}")
foreach(source ${sources})

100
src/main.cpp

@ -3,6 +3,11 @@
#include <NSWrapper.hpp>
#include <png.hpp>
#include <moggle/core/gl.hpp>
#include <moggle/core/shader.hpp>
#include <moggle/core/vao.hpp>
#include <moggle/core/vbo.hpp>
#include <OpenGL/gl3.h>
#include <vector>
@ -16,12 +21,17 @@ using namespace std;
#define BUFFER_OFFSET(i) ((char *)NULL + (i))
const GLfloat quad[] = {
struct Vertex{
moggle::vector3<GLfloat> position;
moggle::vector3<GLfloat> color;
};
const Vertex quad[] = {
// x y z, r g b
1, -1, 0, 1, 0, 0,
-1, -1, 0, 0, 1, 0,
1, 1, 0, 0, 0, 1,
-1, 1, 0, 1, 1, 1
{{1, -1, 0}, {1, 0, 0}},
{{-1, -1, 0}, {0, 1, 0}},
{{1, 1, 0}, {0, 0, 1}},
{{-1, 1, 0}, {1, 1, 1}}
};
static void check_shader(GLuint s){
@ -43,70 +53,50 @@ string slurp(string filename) {
}
struct App {
float time;
GLuint program;
GLint uniform;
GLuint vao;
GLuint posBufferName;
float time = 0;
moggle::shader_program program;
moggle::vao v;
moggle::vbo<Vertex> quad_vbo;
enum {
POS_ATTR,
COL_ATTR
};
void initialize(){
time = 0;
program = glCreateProgram();
auto v_source_str = slurp("Fractal.vsh");
auto v_source = v_source_str.c_str();
GLuint v = glCreateShader(GL_VERTEX_SHADER);
glShaderSource(v, 1, &v_source, NULL);
glCompileShader(v);
check_shader(v);
auto f_source_str = slurp("Fractal.fsh");
auto f_source = f_source_str.c_str();
GLuint f = glCreateShader(GL_FRAGMENT_SHADER);
glShaderSource(f, 1, &f_source, NULL);
glCompileShader(f);
check_shader(f);
glAttachShader(program, v);
glAttachShader(program, f);
glBindAttribLocation(program, 0, "position");
glBindAttribLocation(program, 1, "color");
glLinkProgram(program);
auto vs = moggle::shader::from_file(moggle::shader_type::vertex, "Fractal.vsh");
auto fs = moggle::shader::from_file(moggle::shader_type::fragment, "Fractal.fsh");
uniform = glGetUniformLocation(program, "rotation");
program.attach(vs);
program.attach(fs);
glDetachShader(program, v);
glDeleteShader(v);
glDetachShader(program, f);
glDeleteShader(f);
program.bind_attribute(POS_ATTR, "position");
program.bind_attribute(COL_ATTR, "color");
glGenVertexArrays(1, &vao);
glBindVertexArray(vao);
program.link();
glGenBuffers(1, &posBufferName);
glBindBuffer(GL_ARRAY_BUFFER, posBufferName);
glBufferData(GL_ARRAY_BUFFER, 4*6*4, quad, GL_STATIC_DRAW);
v.bind();
quad_vbo.bind(GL_ARRAY_BUFFER);
quad_vbo.data(quad);
glEnableVertexAttribArray(0);
glEnableVertexAttribArray(1);
moggle::gl::enable_vertex_attribute_array(POS_ATTR);
moggle::gl::enable_vertex_attribute_array(COL_ATTR);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 6*4, BUFFER_OFFSET(0));
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 6*4, BUFFER_OFFSET(3*4));
v.attribute(POS_ATTR, quad_vbo, &Vertex::position);
v.attribute(COL_ATTR, quad_vbo, &Vertex::color);
}
void draw(){
time += 1/60.0f;
glClearColor(0.65f, 0.65f, 0.65f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
moggle::gl::clear_color(0.65f, 0.65f, 0.65f, 1.0f);
moggle::gl::clear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glUseProgram(program);
glUniform1f(uniform, time);
glBindVertexArray(vao);
program.use();
program.uniform<GLfloat>("rotation").set(time);
v.bind();
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
moggle::gl::draw_arrays(GL_TRIANGLE_STRIP, 0, 4);
}
};
@ -195,7 +185,7 @@ int main() {
app.create_window({
[&](ContextParameters){
a.initialize();
b.initialize();
// b.initialize();
},
[&](ContextParameters){
a.draw();