您的位置:首页 > 移动开发 > Cocos引擎

cocos2dx 自带shader 创建一个三角形

2015-06-23 11:32 453 查看
<1>HelloWorld.h

#ifndef __HELLOWORLD_SCENE_H__
#define __HELLOWORLD_SCENE_H__

#include "cocos2d.h"
USING_NS_CC;
#include<string>
using namespace std;

class HelloWorld : public cocos2d::Layer
{
public:
HelloWorld();
~HelloWorld();
static cocos2d::Scene* createScene();
virtual bool init();
CREATE_FUNC(HelloWorld);
virtual void visit(Renderer* renderer, const Mat4& parentTransform, uint32_t parentFlags);
void onDraw();
private:
CustomCommand _command;
};

#endif // __HELLOWORLD_SCENE_H__
<2>HelloWorld.cpp

#include "HelloWorldScene.h"
USING_NS_CC;
using namespace std;

HelloWorld::HelloWorld(){

}

HelloWorld::~HelloWorld(){

}

bool HelloWorld::init()
{
if ( !Layer::init() ){
return false;
}

this->setGLProgram(GLProgramCache::getInstance()->getGLProgram(GLProgram::SHADER_NAME_POSITION_COLOR));

return true;
}

void HelloWorld::visit(Renderer *renderer, const Mat4& parentTransform, uint32_t parentFlags){
Node::visit(renderer, parentTransform, parentFlags);
_command.init(_globalZOrder);
_command.func = CC_CALLBACK_0(HelloWorld::onDraw, this);
Director::getInstance()->getRenderer()->addCommand(&_command);
}

void HelloWorld::onDraw(){
auto glProgram = getGLProgram();
glProgram->use();
glProgram->setUniformsForBuiltins();
auto winSize = Director::getInstance()->getWinSize();
float vert[] = {
0, 0,
winSize.width, 0,
winSize.width/2, winSize.height
};

float color[] = {
0, 1, 0, 1, //绿
1, 0, 0, 1, //红
0, 0, 1, 1  //蓝
};

GL::enableVertexAttribs(GL::VERTEX_ATTRIB_FLAG_POSITION | GL::VERTEX_ATTRIB_FLAG_COLOR);
glVertexAttribPointer(GLProgram::VERTEX_ATTRIB_POSITION, 2, GL_FLOAT, GL_FALSE, 0, vert);
glVertexAttribPointer(GLProgram::VERTEX_ATTRIB_COLOR, 4, GL_FLOAT, GL_FALSE, 0, color);
glDrawArrays(GL_TRIANGLES, 0, 3);
CC_INCREMENT_GL_DRAWN_BATCHES_AND_VERTICES(1, 3);
CHECK_GL_ERROR_DEBUG();
}

Scene* HelloWorld::createScene()
{
auto scene = Scene::create();
auto layer = HelloWorld::create();
scene->addChild(layer);
return scene;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: