Hello,
I have been struggling to use OpenGl with cocos2dx since the past couple of days. This is the code that i am writing to draw a triangle on the screen but all i see is a frekin black screen… please help.
Here is my .cpp file
#include “HelloWorldScene.h”
#include “ui/CocosGUI.h”
#define COLOR_LIGHT_BLUE Color4F(0.2 , 0.5, 1, 0.5)
#define COLOR_MIDNIGHT_BLUE Color4F(0, 0, 1, 1)
USING_NS_CC;
Scene* HelloWorldScene::createScene()
{
// ‘scene’ is an autor elease object
auto scene = Scene::create();
// 'layer' is an autorelease object
auto layer = HelloWorldScene::create();
// add layer as a child to scene
scene->addChild(layer);
// return the scene
return scene;
}
// on “init” you need to initialize your instance
bool HelloWorldScene::init()
{
//////////////////////////////
// 1. super init first
if ( !Layer::init() )
{
return false;
}
Size visibleSize = Director::getInstance()->getVisibleSize();
Vec2 origin = Director::getInstance()->getVisibleOrigin();
// auto bgSprite = Sprite::create(“main_menu_bg.png”);
//bgSprite->setPosition(Point(origin.x + visibleSize.width / 2, origin.y + visibleSize.height / 2));
//bgSprite->setScale(visibleSize.width / bgSprite->getContentSize().width, visibleSize.height / bgSprite->getContentSize().height);
// this->addChild(bgSprite);
return true;
}
void HelloWorldScene::draw(Renderer *renderer, const Mat4 &transform, uint32_t flags)
{
_customCommand.init(_globalZOrder, transform, flags);
_customCommand.func = CC_CALLBACK_0(HelloWorldScene::onDraw, this, transform, flags);
renderer->addCommand(&_customCommand);
}
void HelloWorldScene::onDraw(const Mat4 &transform, uint32_t flags){
/*
cocos2d::CCSize screenSize = cocos2d::CCDirector::sharedDirector()->getWinSize();
//red line from bottom left to top right corner
cocos2d::ccDrawColor4F(1.0f, 0.0f, 0.0f, 1.0f);
cocos2d::ccDrawLine(ccp(0,0), ccp(screenSize.width, screenSize.height));
//green line from bottom right to top left corner
cocos2d::ccDrawColor4F(0.0f, 1.0f, 0.0f, 1.0f);
cocos2d::ccDrawLine(ccp(screenSize.width,0), ccp(0, screenSize.height));
*/
static const GLfloat g_vertex_buffer_data[] = {
-1.0f, -1.0f, 0.0f,
1.0f, -1.0f, 0.0f,
0.0f, 1.0f, 0.0f,
};
// This will identify our vertex buffer
GLuint vertexbuffer;
// Generate 1 buffer, put the resulting identifier in vertexbuffer
glGenBuffers(1, &vertexbuffer);
// The following commands will talk about our ‘vertexbuffer’ buffer
glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer);
// Give our vertices to OpenGL.
glBufferData(GL_ARRAY_BUFFER, sizeof(g_vertex_buffer_data), g_vertex_buffer_data, GL_STATIC_DRAW);
// 1rst attribute buffer : vertices
glEnableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer);
glVertexAttribPointer(
0, // attribute 0. No particular reason for 0, but must match the layout in the shader.
3, // size
GL_FLOAT, // type
GL_FALSE, // normalized?
0, // stride
(void*)0 // array buffer offset
);
// Draw the triangle !
glDrawArrays(GL_TRIANGLES, 0, 3); // Starting from vertex 0; 3 vertices total -> 1 triangle
glDisableVertexAttribArray(0);
}
void HelloWorldScene::menuCloseCallback(Ref* pSender)
{
Director::getInstance()->end();
#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
exit(0);
#endif
}