Box2D Forums

It is currently Sat May 25, 2013 1:15 pm

All times are UTC - 8 hours [ DST ]




Post new topic Reply to topic  [ 15 posts ]  Go to page 1, 2  Next
Author Message
PostPosted: Thu Jun 14, 2012 10:56 am 
Offline

Joined: Fri Mar 09, 2012 1:43 pm
Posts: 69
I finally found my box2d version:

b2Version b2_version = {2, 1, 2};

Debug draw doesn't seem to work. These are the files I have for GLES Render:

Code:
/*
 * Copyright (c) 2006-2007 Erin Catto http://www.gphysics.com
 *
 * iPhone port by Simon Oliver - http://www.simonoliver.com - http://www.handcircus.com
 *
 * This software is provided 'as-is', without any express or implied
 * warranty.  In no event will the authors be held liable for any damages
 * arising from the use of this software.
 * Permission is granted to anyone to use this software for any purpose,
 * including commercial applications, and to alter it and redistribute it
 * freely, subject to the following restrictions:
 * 1. The origin of this software must not be misrepresented; you must not
 * claim that you wrote the original software. If you use this software
 * in a product, an acknowledgment in the product documentation would be
 * appreciated but is not required.
 * 2. Altered source versions must be plainly marked as such, and must not be
 * misrepresented as being the original software.
 * 3. This notice may not be removed or altered from any source distribution.
 */

#ifndef RENDER_H
#define RENDER_H

#import <UIKit/UIKit.h>
#import <OpenGLES/EAGL.h>
#import <OpenGLES/ES1/gl.h>
#import <OpenGLES/ES1/glext.h>

#include <Box2D/Box2D.h>

struct b2AABB;

// This class implements debug drawing callbacks that are invoked
// inside b2World::Step.
class GLESDebugDraw : public b2DebugDraw
{
public:
   void DrawPolygon(const b2Vec2* vertices, int32 vertexCount, const b2Color& color);
   
   void DrawSolidPolygon(const b2Vec2* vertices, int32 vertexCount, const b2Color& color);
   
   void DrawCircle(const b2Vec2& center, float32 radius, const b2Color& color);
   
   void DrawSolidCircle(const b2Vec2& center, float32 radius, const b2Vec2& axis, const b2Color& color);
   
   void DrawSegment(const b2Vec2& p1, const b2Vec2& p2, const b2Color& color);
   
   void DrawTransform(const b2Transform& xf);
   
    void DrawPoint(const b2Vec2& p, float32 size, const b2Color& color);
   
    void DrawString(int x, int y, const char* string, ...);
   
    void DrawAABB(b2AABB* aabb, const b2Color& color);
};


#endif


and GLESRender.mm

Code:
/*
 * Copyright (c) 2006-2007 Erin Catto http://www.gphysics.com
 *
 * iPhone port by Simon Oliver - http://www.simonoliver.com - http://www.handcircus.com
 *
 * This software is provided 'as-is', without any express or implied
 * warranty.  In no event will the authors be held liable for any damages
 * arising from the use of this software.
 * Permission is granted to anyone to use this software for any purpose,
 * including commercial applications, and to alter it and redistribute it
 * freely, subject to the following restrictions:
 * 1. The origin of this software must not be misrepresented; you must not
 * claim that you wrote the original software. If you use this software
 * in a product, an acknowledgment in the product documentation would be
 * appreciated but is not required.
 * 2. Altered source versions must be plainly marked as such, and must not be
 * misrepresented as being the original software.
 * 3. This notice may not be removed or altered from any source distribution.
 */

#include "GLES-Render.h"


#include <cstdio>
#include <cstdarg>

#include <cstring>

void GLESDebugDraw::DrawPolygon(const b2Vec2* vertices, int32 vertexCount, const b2Color& color)
{
   glColor4f(color.r, color.g, color.b,1);
   glVertexPointer(2, GL_FLOAT, 0, vertices);
   glDrawArrays(GL_LINE_LOOP, 0, vertexCount);
}

void GLESDebugDraw::DrawSolidPolygon(const b2Vec2* vertices, int32 vertexCount, const b2Color& color)
{
   glVertexPointer(2, GL_FLOAT, 0, vertices);
   
   glColor4f(color.r, color.g, color.b,0.5f);
   glDrawArrays(GL_TRIANGLE_FAN, 0, vertexCount);
   
   glColor4f(color.r, color.g, color.b,1);
   glDrawArrays(GL_LINE_LOOP, 0, vertexCount);
}

void GLESDebugDraw::DrawCircle(const b2Vec2& center, float32 radius, const b2Color& color)
{
   const float32 k_segments = 16.0f;
   int vertexCount=16;
   const float32 k_increment = 2.0f * b2_pi / k_segments;
   float32 theta = 0.0f;
   
   GLfloat            glVertices[vertexCount*2];
   for (int32 i = 0; i < k_segments; ++i)
   {
      b2Vec2 v = center + radius * b2Vec2(cosf(theta), sinf(theta));
      glVertices[i*2]=v.x;
      glVertices[i*2+1]=v.y;
      theta += k_increment;
   }
   
   glColor4f(color.r, color.g, color.b,1);
   glVertexPointer(2, GL_FLOAT, 0, glVertices);
   
   glDrawArrays(GL_TRIANGLE_FAN, 0, vertexCount);
}

void GLESDebugDraw::DrawSolidCircle(const b2Vec2& center, float32 radius, const b2Vec2& axis, const b2Color& color)
{
   const float32 k_segments = 16.0f;
   int vertexCount=16;
   const float32 k_increment = 2.0f * b2_pi / k_segments;
   float32 theta = 0.0f;
   
   GLfloat            glVertices[vertexCount*2];
   for (int32 i = 0; i < k_segments; ++i)
   {
      b2Vec2 v = center + radius * b2Vec2(cosf(theta), sinf(theta));
      glVertices[i*2]=v.x;
      glVertices[i*2+1]=v.y;
      theta += k_increment;
   }
   
   glColor4f(color.r, color.g, color.b,0.5f);
   glVertexPointer(2, GL_FLOAT, 0, glVertices);
   glDrawArrays(GL_TRIANGLE_FAN, 0, vertexCount);
   glColor4f(color.r, color.g, color.b,1);
   glDrawArrays(GL_LINE_LOOP, 0, vertexCount);
   
   // Draw the axis line
   DrawSegment(center,center+radius*axis,color);
}

void GLESDebugDraw::DrawSegment(const b2Vec2& p1, const b2Vec2& p2, const b2Color& color)
{
   glColor4f(color.r, color.g, color.b,1);
   GLfloat            glVertices[] = {
      p1.x,p1.y,p2.x,p2.y
   };
   glVertexPointer(2, GL_FLOAT, 0, glVertices);
   glDrawArrays(GL_LINES, 0, 2);
}

void GLESDebugDraw::DrawTransform(const b2Transform& xf)
{
   b2Vec2 p1 = xf.position, p2;
   const float32 k_axisScale = 0.4f;
   
   p2 = p1 + k_axisScale * xf.R.col1;
   DrawSegment(p1,p2,b2Color(1,0,0));
   
   p2 = p1 + k_axisScale * xf.R.col2;
   DrawSegment(p1,p2,b2Color(0,1,0));
}

void GLESDebugDraw::DrawPoint(const b2Vec2& p, float32 size, const b2Color& color)
{
   glColor4f(color.r, color.g, color.b,1);
   glPointSize(size);
   GLfloat            glVertices[] = {
      p.x,p.y
   };
   glVertexPointer(2, GL_FLOAT, 0, glVertices);
   glDrawArrays(GL_POINTS, 0, 1);
   glPointSize(1.0f);
}

void GLESDebugDraw::DrawString(int x, int y, const char *string, ...)
{
   
   /* Unsupported as yet. Could replace with bitmap font renderer at a later date */
}

void GLESDebugDraw::DrawAABB(b2AABB* aabb, const b2Color& c)
{
   
   glColor4f(c.r, c.g, c.b,1);
   
   GLfloat            glVertices[] = {
      aabb->lowerBound.x, aabb->lowerBound.y,
      aabb->upperBound.x, aabb->lowerBound.y,
      aabb->upperBound.x, aabb->upperBound.y,
      aabb->lowerBound.x, aabb->upperBound.y
   };
   glVertexPointer(2, GL_FLOAT, 0, glVertices);
   glDrawArrays(GL_LINE_LOOP, 0, 8);
   
}


and these are the methods I call:

Code:
-(void)setupDebugDraw{
    debugDraw = new GLESDebugDraw( );
    world->SetDebugDraw(debugDraw);
       
    uint32 flags = 0;
    flags += b2DebugDraw::e_shapeBit;
    //      flags += b2Draw::e_jointBit;
    //      flags += b2Draw::e_aabbBit;
    //      flags += b2Draw::e_pairBit;
    //      flags += b2Draw::e_centerOfMassBit;
    debugDraw->SetFlags(flags);      
}

-(void) draw{
   [super draw];
   ccGLEnableVertexAttribs( kCCVertexAttribFlag_Position );
   kmGLPushMatrix();
   world->DrawDebugData();      
   kmGLPopMatrix();
}


but nothing shows up. The scene runs fine but nothing shows up.


Top
 Profile  
 
PostPosted: Fri Jun 15, 2012 7:24 pm 
Offline

Joined: Fri Mar 09, 2012 1:43 pm
Posts: 69
Has anyone figured out how to fix debug draw on cocos2d v2.0?


Top
 Profile  
 
PostPosted: Sat Jun 16, 2012 12:05 am 
Offline

Joined: Tue Jun 24, 2008 8:25 pm
Posts: 1517
Location: Tokyo
This seems like a question for the cocos2d forums.
You can try stepping with the debugger to see if the drawing code is actually being called, check the positions of the vertices that are being drawn.


Top
 Profile  
 
PostPosted: Sat Jun 16, 2012 7:03 am 
Offline

Joined: Fri Mar 09, 2012 1:43 pm
Posts: 69
I did but no one answers over there either. The debugDraw method is being called, I've checked.


Top
 Profile  
 
PostPosted: Sat Jun 16, 2012 10:00 pm 
Offline

Joined: Sun Oct 25, 2009 3:28 am
Posts: 242
He meant stepping with the debugger and do a stack trace to see if the drawing code (the actual drawing part of the code inside debugDraw, not just calling debugDraw).


Top
 Profile  
 
PostPosted: Sun Jun 17, 2012 12:19 am 
Offline

Joined: Tue Jun 24, 2008 8:25 pm
Posts: 1517
Location: Tokyo
I did indeed. You should be able to check what vertex positions are being used.


Top
 Profile  
 
PostPosted: Sun Jun 17, 2012 5:48 am 
Offline

Joined: Fri Mar 09, 2012 1:43 pm
Posts: 69
By stepping you mean add breakpoints in the debug draw method?


Top
 Profile  
 
PostPosted: Sun Jun 17, 2012 8:11 am 
Offline

Joined: Tue Jun 24, 2008 8:25 pm
Posts: 1517
Location: Tokyo
Yup. From there you should be able to step into every function until you get to where the drawing actually happens.


Top
 Profile  
 
PostPosted: Mon Jun 18, 2012 12:09 pm 
Offline

Joined: Fri Mar 09, 2012 1:43 pm
Posts: 69
Where exactly? I added it to the world->SetDebugDraw buy it just stepped over it without taking me to the debug draw class.

I added it to GLESRender.mm - DrawSolidPolygon and finally it stepped into it, but This is what i get in the debugger:

Attachment:
Screen Shot 2012-06-18 at 1.17.22 PM.png
Screen Shot 2012-06-18 at 1.17.22 PM.png [ 244.68 KiB | Viewed 1213 times ]


And if i keep pressing Resume Program execution button, it keeps showing this except for changing the last 2 item values at the bottom, and every 13 or so resumes it spits out a CCSprite draw 532 line in the console.


Top
 Profile  
 
PostPosted: Mon Jun 18, 2012 2:39 pm 
Offline

Joined: Tue Jun 24, 2008 8:25 pm
Posts: 1517
Location: Tokyo
In your screenshot, I think the values of 'vertices' and 'vertexCount' have not yet been initialized because the program has not fully entered the function.

Try putting the breakpoint on the glDrawArrays lines, and check the values in the 'vertices' variable. It should make sense according to the things being drawn in your world. If it's ok, then maybe there is some other OpenGL state that is not set correctly to show something, eg. depth test, lighting, view position etc.


Top
 Profile  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 15 posts ]  Go to page 1, 2  Next

All times are UTC - 8 hours [ DST ]


Who is online

Users browsing this forum: No registered users and 5 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Powered by phpBB® Forum Software © phpBB Group