axmol/cocos/2d/renderer/Renderer.h

91 lines
1.7 KiB
C
Raw Normal View History

//
// Created by NiTe Luo on 10/31/13.
//
2013-11-12 03:54:08 +08:00
#ifndef __CC_RENDERER_H_
#define __CC_RENDERER_H_
#include "CCPlatformMacros.h"
#include "RenderCommand.h"
#include "CCGLProgram.h"
2013-11-09 04:06:39 +08:00
#include "CCGL.h"
2013-11-12 03:54:08 +08:00
#include <vector>
2013-11-14 09:31:12 +08:00
#include <stack>
2013-11-08 07:48:37 +08:00
#define VBO_SIZE 10500
2013-11-14 09:31:12 +08:00
#define DEFAULT_RENDER_QUEUE 0
NS_CC_BEGIN
typedef std::vector<RenderCommand*> RenderQueue;
2013-11-14 09:31:12 +08:00
struct RenderStackElement
{
int renderQueueID;
size_t currentIndex;
};
2013-11-08 08:50:53 +08:00
class Renderer : public Object
{
public:
static Renderer* getInstance();
2013-11-08 08:50:53 +08:00
static void destroyInstance();
//TODO manage GLView inside Render itself
void initGLView();
//TODO support multiple viewport
2013-11-16 09:32:29 +08:00
void addCommand(RenderCommand* command);
void addCommand(RenderCommand* command, int renderQueue);
void pushGroup(int renderQueueID);
void popGroup();
2013-11-16 03:29:11 +08:00
int createRenderQueue();
void render();
protected:
Renderer();
2013-11-08 07:48:37 +08:00
~Renderer();
2013-11-08 08:50:53 +08:00
bool init();
2013-11-08 08:50:53 +08:00
void setupIndices();
2013-12-05 09:02:02 +08:00
//Setup VBO or VAO based on OpenGL extensions
void setupBuffer();
2013-11-08 08:50:53 +08:00
void setupVBOAndVAO();
2013-12-05 09:02:02 +08:00
void setupVBO();
void mapBuffers();
void drawBatchedQuads();
2013-11-09 04:06:39 +08:00
//Draw the previews queued quads and flush previous context
void flush();
void onBackToForeground(Object* obj);
2013-12-05 09:02:02 +08:00
protected:
std::stack<int> _commandGroupStack;
std::stack<RenderStackElement> _renderStack;
std::vector<RenderQueue> _renderGroups;
2013-11-14 09:31:12 +08:00
int _lastMaterialID;
2013-11-08 08:50:53 +08:00
2013-11-11 16:14:29 +08:00
size_t _firstCommand;
size_t _lastCommand;
V3F_C4B_T2F_Quad _quads[VBO_SIZE];
GLushort _indices[6 * VBO_SIZE];
2013-11-23 02:24:52 +08:00
GLuint _quadVAO;
2013-11-08 08:50:53 +08:00
GLuint _buffersVBO[2]; //0: vertex 1: indices
2013-11-08 07:48:37 +08:00
int _numQuads;
bool _glViewAssigned;
};
NS_CC_END
2013-11-12 03:54:08 +08:00
#endif //__CC_RENDERER_H_