Skip to content

Instantly share code, notes, and snippets.

@ryanbartley
Created May 19, 2016 21:13
Show Gist options
  • Save ryanbartley/4d1b6f61d85c6d0eea23a9ff055bf19e to your computer and use it in GitHub Desktop.
Save ryanbartley/4d1b6f61d85c6d0eea23a9ff055bf19e to your computer and use it in GitHub Desktop.
Helper files getting into OpenGL and Cinder
#include "cinder/app/App.h"
#include "cinder/app/RendererGl.h"
#include "cinder/gl/gl.h"
using namespace ci;
using namespace ci::app;
using namespace std;
class HelloTriangleApp : public App {
public:
void setup() override;
void mouseDown( MouseEvent event ) override;
void update() override;
void draw() override;
gl::BatchRef mCube;
ci::CameraPersp mCam;
ci::mat4 mModelMatrix;
};
void HelloTriangleApp::setup()
{
mCube = gl::Batch::create( geom::Cube(), gl::getStockShader( gl::ShaderDef().color().lambert() ) );
mCam.setPerspective( 60.0f, getWindowAspectRatio(), .01, 10000.0f );
mCam.lookAt( ci::vec3( 0, 0, 5 ), ci::vec3( 0 ) );
}
void HelloTriangleApp::mouseDown( MouseEvent event )
{
}
void HelloTriangleApp::update()
{
static float rotation = 0.0;
mModelMatrix = glm::rotate( rotation += 0.01, vec3( 0, 1, 0 ) );
}
void HelloTriangleApp::draw()
{
gl::clear( Color( 0, 0, 0 ) );
gl::ScopedDepth depth( true );
gl::ScopedMatrices mat;
gl::setMatrices( mCam );
gl::color( 1, 0, 0 );
gl::ScopedModelMatrix model;
gl::setModelMatrix( mModelMatrix );
mCube->draw();
}
CINDER_APP( HelloTriangleApp, RendererGl )
#include "cinder/app/App.h"
#include "cinder/app/RendererGl.h"
#include "cinder/gl/gl.h"
using namespace ci;
using namespace ci::app;
using namespace std;
class HelloTriangleApp : public App {
public:
void setup() override;
void mouseDown( MouseEvent event ) override;
void update() override;
void draw() override;
gl::VboRef vbo;
gl::VaoRef vao;
gl::GlslProgRef glsl;
gl::BatchRef batch;
};
void HelloTriangleApp::setup()
{
struct Vertex {
ci::vec3 pos, color;
};
std::array<Vertex, 3> vertices{
Vertex{ vec3( 0,.5,0 ), vec3( 1,0,0 ) },
Vertex{ vec3( -.5,-.5,0 ), vec3( 0,1,0 ) },
Vertex{ vec3( .5,-.5,0 ), vec3( 0,0,1 ) }
};
vbo = gl::Vbo::create( GL_ARRAY_BUFFER, sizeof( Vertex ) * vertices.size(), vertices.data(), GL_STATIC_DRAW );
vao = gl::Vao::create();
//gl::ScopedVao vao( vao );
const uint32_t POSITION_INDEX = 0, COLOR_INDEX = 1;
vao->bind();
{
auto ptr0 = offsetof( Vertex, pos );
auto ptr1 = offsetof( Vertex, color );
console() << ptr0 << " " << ptr1 << " " << sizeof( Vertex ) << endl;
//gl::ScopedBuffer vbo( vbo )
vbo->bind();
gl::enableVertexAttribArray( POSITION_INDEX );
gl::vertexAttribPointer( POSITION_INDEX, 3, GL_FLOAT, GL_FALSE, sizeof( Vertex ), ( const GLvoid* ) ptr0 );
gl::enableVertexAttribArray( COLOR_INDEX );
gl::vertexAttribPointer( COLOR_INDEX, 3, GL_FLOAT, GL_FALSE, sizeof( Vertex ), ( const GLvoid* ) ptr1 );
}
std::string vs = "#version 330\n"
"in vec3 position;\n"
"in vec3 color;\n"
"out vec3 vColor;\n"
"uniform float time;"
"void main(){\n"
" gl_Position = vec4(position, 1.0);\n"
" vColor = color * ((sin(time + (gl_VertexID * 100)) + 1) * .5);\n }";
std::string fs = "#version 330\n"
"in vec3 vColor;\n"
"out vec4 oColor;\n"
"void main(){ oColor = vec4(vColor, 1.0); }";
glsl = gl::GlslProg::create( gl::GlslProg::Format().vertex( vs ).fragment( fs )
.attribLocation( "position", POSITION_INDEX )
.attribLocation( "color", COLOR_INDEX ) );
}
void HelloTriangleApp::mouseDown( MouseEvent event )
{
}
void HelloTriangleApp::update()
{
}
void HelloTriangleApp::draw()
{
gl::clear( Color( 0, 0, 0 ) );
gl::ScopedVao scopeVao( vao );
gl::ScopedGlslProg scopeGlsl( glsl );
glsl->uniform( "time", (float)getElapsedSeconds() );
gl::drawArrays( GL_TRIANGLES, 0, 3 );
}
CINDER_APP( HelloTriangleApp, RendererGl )
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment