cocos2dx shader 第一个三角形<1>

前端之家收集整理的这篇文章主要介绍了cocos2dx shader 第一个三角形<1>前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

<1>HelloWorld.h

  1. #ifndef __HELLOWORLD_SCENE_H__
  2. #define __HELLOWORLD_SCENE_H__
  3.  
  4. #include "cocos2d.h"
  5. USING_NS_CC;
  6. #include<string>
  7. using namespace std;
  8.  
  9. class HelloWorld : public cocos2d::Layer
  10. {
  11. public:
  12. HelloWorld();
  13. ~HelloWorld();
  14. static cocos2d::Scene* createScene();
  15. virtual bool init();
  16. CREATE_FUNC(HelloWorld);
  17. virtual void visit(Renderer* renderer,const Mat4& parentTransform,uint32_t parentFlags);
  18. void onDraw();
  19. private:
  20. CustomCommand _command;
  21. };
  22.  
  23.  
  24. #endif // __HELLOWORLD_SCENE_H__
<2>HelloWorld.cpp
  1. #include "HelloWorldScene.h"
  2. USING_NS_CC;
  3. using namespace std;
  4.  
  5. HelloWorld::HelloWorld(){
  6. }
  7.  
  8. HelloWorld::~HelloWorld(){
  9. }
  10.  
  11. bool HelloWorld::init()
  12. {
  13. if ( !Layer::init() ){
  14. return false;
  15. }
  16. this->setGLProgram(GLProgramCache::getInstance()->getGLProgram(GLProgram::SHADER_NAME_POSITION_COLOR));
  17. return true;
  18. }
  19.  
  20. void HelloWorld::visit(Renderer *renderer,uint32_t parentFlags){
  21. Node::visit(renderer,parentTransform,parentFlags);
  22. _command.init(_globalZOrder);
  23. _command.func = CC_CALLBACK_0(HelloWorld::onDraw,this);
  24. Director::getInstance()->getRenderer()->addCommand(&_command);
  25. }
  26.  
  27. void HelloWorld::onDraw(){
  28. auto glProgram = getGLProgram();
  29. glProgram->use();
  30. glProgram->setUniformsForBuiltins();
  31. auto winSize = Director::getInstance()->getWinSize();
  32. float vert[] = {
  33. 0,winSize.width,winSize.width/2,winSize.height
  34. };
  35. float color[] = {
  36. 0,1,//绿
  37. 1,//红
  38. 0,1 //蓝
  39. };
  40. GL::enableVertexAttribs(GL::VERTEX_ATTRIB_FLAG_POSITION | GL::VERTEX_ATTRIB_FLAG_COLOR);
  41. glVertexAttribPointer(GLProgram::VERTEX_ATTRIB_POSITION,2,GL_FLOAT,GL_FALSE,vert);
  42. glVertexAttribPointer(GLProgram::VERTEX_ATTRIB_COLOR,4,color);
  43. glDrawArrays(GL_TRIANGLES,3);
  44. CC_INCREMENT_GL_DRAWN_BATCHES_AND_VERTICES(1,3);
  45. CHECK_GL_ERROR_DEBUG();
  46. }
  47.  
  48. Scene* HelloWorld::createScene()
  49. {
  50. auto scene = Scene::create();
  51. auto layer = HelloWorld::create();
  52. scene->addChild(layer);
  53. return scene;
  54. }

猜你在找的Cocos2d-x相关文章