2013-11-05 01:14:22 +08:00
|
|
|
//
|
|
|
|
// Created by NiTe Luo on 10/31/13.
|
|
|
|
//
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#ifndef __CCRENDERER_H_
|
|
|
|
#define __CCRENDERER_H_
|
|
|
|
|
|
|
|
#include "CCPlatformMacros.h"
|
|
|
|
#include "CCEGLView.h"
|
|
|
|
#include "RenderCommand.h"
|
|
|
|
#include "CCGLProgram.h"
|
2013-11-08 07:48:37 +08:00
|
|
|
#include "QuadCommand.h"
|
|
|
|
|
2013-11-08 08:50:53 +08:00
|
|
|
#define VBO_SIZE 64
|
2013-11-05 01:14:22 +08:00
|
|
|
|
|
|
|
NS_CC_BEGIN
|
|
|
|
using namespace std;
|
|
|
|
|
2013-11-08 08:50:53 +08:00
|
|
|
class Renderer : public Object
|
2013-11-05 01:14:22 +08:00
|
|
|
{
|
|
|
|
public:
|
|
|
|
static Renderer* getInstance();
|
2013-11-08 08:50:53 +08:00
|
|
|
static void destroyInstance();
|
2013-11-05 01:14:22 +08:00
|
|
|
|
2013-11-08 02:09:53 +08:00
|
|
|
//TODO support multiple viewport
|
2013-11-08 07:48:37 +08:00
|
|
|
void addRenderCommand(RenderCommand* command);
|
2013-11-05 01:14:22 +08:00
|
|
|
void render();
|
|
|
|
|
|
|
|
protected:
|
|
|
|
Renderer();
|
2013-11-08 07:48:37 +08:00
|
|
|
~Renderer();
|
|
|
|
|
2013-11-08 08:50:53 +08:00
|
|
|
bool init();
|
|
|
|
void setupIndices();
|
|
|
|
void setupVBOAndVAO();
|
|
|
|
|
2013-11-08 07:48:37 +08:00
|
|
|
void batchQuads(QuadCommand* cmd);
|
|
|
|
void drawQuads();
|
2013-11-05 01:14:22 +08:00
|
|
|
|
|
|
|
protected:
|
|
|
|
vector<RenderCommand*> _renderQueue;
|
2013-11-08 02:09:53 +08:00
|
|
|
int _lastMaterialID;
|
2013-11-08 08:50:53 +08:00
|
|
|
|
|
|
|
|
|
|
|
V3F_C4B_T2F_Quad*_quads;
|
|
|
|
GLushort* _indices;
|
|
|
|
GLuint _VAOname;
|
|
|
|
GLuint _buffersVBO[2]; //0: vertex 1: indices
|
|
|
|
|
2013-11-08 07:48:37 +08:00
|
|
|
int _numQuads;
|
2013-11-05 01:14:22 +08:00
|
|
|
};
|
|
|
|
|
|
|
|
NS_CC_END
|
|
|
|
|
|
|
|
#endif //__CCRENDERER_H_
|