#include "scene2d.h"
#include "iecrenderer.h"
#include "common.h"
ITexture* g_texture;
IShaderProgram* g_shader;
Scene2D::Scene2D(IECRenderer* parentRenderer) : ISceneManager(parentRenderer)
{
}
void Scene2D::fillIndexBuffer(CJB_USHORT numQuads)
{
}
void Scene2D::init()
{
m_parentRenderer->setClearColor(0.4f, 0.6f, 0.9f, 0.0f);
g_texture = m_parentRenderer->createTextureWithImage("textures/twitter-bird.png");
m_pVAO = m_parentRenderer->generateVAO();
m_parentRenderer->bindVAO(m_pVAO);
m_verticiesVBO = m_parentRenderer->generateVBO();
m_indicesVBO = m_parentRenderer->generateVBO();
m_numQuads = 0;
m_indices = NULL;
m_verticies = NULL;
AddTexturedScreenQuad(0.0f,0.0f,1.0f,1.0f,g_texture);
}
void Scene2D::preRender(CJB_UINT64 dt)
{
}
void Scene2D::render(CJB_UINT64 dt)
{
m_parentRenderer->clearBuffers(CJB_COLOR_BUFFER|CJB_DEPTH_BUFFER|CJB_STENCIL_BUFFER);
m_parentRenderer->bindTexture(g_texture);
m_parentRenderer->bindVAO(m_pVAO);
m_parentRenderer->bindVBO(VBO_INDICES,m_indicesVBO);
m_parentRenderer->drawElements(DRAW_MODE_TRIANGLES,m_numQuads*2,ET_USHORT,(void*)0);
m_parentRenderer->unbindVAO();
}
void Scene2D::postRender(CJB_UINT64 dt)
{
}
void Scene2D::AddTexturedScreenQuad(float x, float y, float w, float h, ITexture* texture)
{
++m_numQuads;
m_indices = new CJB_USHORT[6];
m_verticies = new s_texturedScreenQuadVertex[4];
//Test values
m_indices[0] = 0;
m_indices[1] = 1;
m_indices[2] = 2;
m_indices[3] = 3;
m_indices[4] = 2;
m_indices[5] = 1;
m_verticies[0].x = -1.0f; m_verticies[1].y = 1.0f; m_verticies[1].z = 0.0f;
m_verticies[0].u = 0.0f; m_verticies[1].v = 0.0f;
m_verticies[1].x = -1.0f; m_verticies[0].y = -1.0f; m_verticies[0].z = 0.0f;
m_verticies[1].u = 0.0f; m_verticies[0].v = 1.0f;
m_verticies[2].x = 1.0f; m_verticies[3].y = -1.0f; m_verticies[3].z = 0.0f;
m_verticies[2].u = 1.0f; m_verticies[3].v = 1.0f;
m_verticies[3].x = 1.0f; m_verticies[2].y = 1.0f; m_verticies[2].z = 0.0f;
m_verticies[3].u = 1.0f; m_verticies[2].v = 0.0f;
//<END>Test values
m_parentRenderer->bindVAO(m_pVAO);
m_parentRenderer->bindVBO(VBO_ARRAY,m_verticiesVBO);
m_parentRenderer->setBufferData(VBO_ARRAY,sizeof(m_verticies[0])*4,m_verticies,VBO_DYNAMIC_DRAW);
m_parentRenderer->enableVertexAttributeArray(0);
m_parentRenderer->setVertexAttributePointer(0,3,ET_FLOAT,true,sizeof(m_verticies[0]),(void*)offsetof(s_texturedScreenQuadVertex,x));
m_parentRenderer->enableVertexAttributeArray(1);
m_parentRenderer->setVertexAttributePointer(1,2,ET_FLOAT,true,sizeof(m_verticies[0]),(void*)offsetof(s_texturedScreenQuadVertex,u));
m_parentRenderer->bindVBO(VBO_INDICES,m_indicesVBO);
m_parentRenderer->setBufferData(VBO_INDICES,sizeof(m_indices[0])*6,m_indices,VBO_STATIC_DRAW);
m_parentRenderer->unbindVAO();
m_parentRenderer->unbindVBO(VBO_ARRAY);
m_parentRenderer->unbindVBO(VBO_INDICES);
}
void Scene2D::shutdown()
{
if (m_indices != NULL)
{
delete m_indices;
m_indices = NULL;
}
if (m_verticies != NULL)
{
delete m_verticies;
m_verticies = NULL;
}
ISceneManager::shutdown();
}