Fix eglPlugin

This commit is contained in:
erwincoumans
2018-09-24 08:06:28 -07:00
parent cdd56e4641
commit c1ba89a01c
2 changed files with 25 additions and 24 deletions

View File

@@ -61,7 +61,7 @@ static void printGLString(const char* name, GLenum s)
using namespace std; using namespace std;
struct MyTexture2 struct MyTexture3
{ {
unsigned char* textureData1; unsigned char* textureData1;
int m_width; int m_width;
@@ -69,7 +69,7 @@ struct MyTexture2
bool m_isCached; bool m_isCached;
}; };
struct TinyRendererObjectArray struct EGLRendererObjectArray
{ {
btAlignedObjectArray<TinyRenderObjectData*> m_renderObjects; btAlignedObjectArray<TinyRenderObjectData*> m_renderObjects;
int m_objectUniqueId; int m_objectUniqueId;
@@ -78,7 +78,7 @@ struct TinyRendererObjectArray
btTransform m_worldTransform; btTransform m_worldTransform;
btVector3 m_localScaling; btVector3 m_localScaling;
TinyRendererObjectArray() EGLRendererObjectArray()
{ {
m_worldTransform.setIdentity(); m_worldTransform.setIdentity();
m_localScaling.setValue(1, 1, 1); m_localScaling.setValue(1, 1, 1);
@@ -96,7 +96,7 @@ struct EGLRendererVisualShapeConverterInternalData
btAlignedObjectArray<unsigned char> m_rgbaPixelBuffer1; btAlignedObjectArray<unsigned char> m_rgbaPixelBuffer1;
btAlignedObjectArray<float> m_depthBuffer1; btAlignedObjectArray<float> m_depthBuffer1;
btHashMap<btHashInt, TinyRendererObjectArray*> m_swRenderInstances; btHashMap<btHashInt, EGLRendererObjectArray*> m_swRenderInstances;
btAlignedObjectArray<b3VisualShapeData> m_visualShapes; btAlignedObjectArray<b3VisualShapeData> m_visualShapes;
@@ -104,7 +104,7 @@ struct EGLRendererVisualShapeConverterInternalData
int m_swWidth; int m_swWidth;
int m_swHeight; int m_swHeight;
TGAImage m_rgbColorBuffer; TGAImage m_rgbColorBuffer;
b3AlignedObjectArray<MyTexture2> m_textures; b3AlignedObjectArray<MyTexture3> m_textures;
b3AlignedObjectArray<float> m_depthBuffer; b3AlignedObjectArray<float> m_depthBuffer;
b3AlignedObjectArray<float> m_shadowBuffer; b3AlignedObjectArray<float> m_shadowBuffer;
b3AlignedObjectArray<int> m_segmentationMaskBuffer; b3AlignedObjectArray<int> m_segmentationMaskBuffer;
@@ -262,7 +262,7 @@ void EGLRendererVisualShapeConverter::setLightSpecularCoeff(float specularCoeff)
} }
///todo: merge into single file with TinyRendererVisualShapeConverter ///todo: merge into single file with TinyRendererVisualShapeConverter
static void convertURDFToVisualShape2(const UrdfShape* visual, const char* urdfPathPrefix, const btTransform& visualTransform, btAlignedObjectArray<GLInstanceVertex>& verticesOut, btAlignedObjectArray<int>& indicesOut, btAlignedObjectArray<MyTexture2>& texturesOut, b3VisualShapeData& visualShapeOut) static void convertURDFToVisualShape2(const UrdfShape* visual, const char* urdfPathPrefix, const btTransform& visualTransform, btAlignedObjectArray<GLInstanceVertex>& verticesOut, btAlignedObjectArray<int>& indicesOut, btAlignedObjectArray<MyTexture3>& texturesOut, b3VisualShapeData& visualShapeOut)
{ {
visualShapeOut.m_visualGeometryType = visual->m_geometry.m_type; visualShapeOut.m_visualGeometryType = visual->m_geometry.m_type;
visualShapeOut.m_dimensions[0] = 0; visualShapeOut.m_dimensions[0] = 0;
@@ -406,7 +406,7 @@ static void convertURDFToVisualShape2(const UrdfShape* visual, const char* urdfP
{ {
if (meshData.m_textureImage1) if (meshData.m_textureImage1)
{ {
MyTexture2 texData; MyTexture3 texData;
texData.m_width = meshData.m_textureWidth; texData.m_width = meshData.m_textureWidth;
texData.m_height = meshData.m_textureHeight; texData.m_height = meshData.m_textureHeight;
texData.textureData1 = meshData.m_textureImage1; texData.textureData1 = meshData.m_textureImage1;
@@ -523,7 +523,7 @@ static void convertURDFToVisualShape2(const UrdfShape* visual, const char* urdfP
} // case mesh } // case mesh
case URDF_GEOM_PLANE: case URDF_GEOM_PLANE:
// TODO: plane in tiny renderer // TODO: plane in egl renderer
// TODO: export visualShapeOut for external render // TODO: export visualShapeOut for external render
break; break;
@@ -647,7 +647,7 @@ void EGLRendererVisualShapeConverter::convertVisualShapes(
for (int v1 = 0; v1 < cnt; v1++) for (int v1 = 0; v1 < cnt; v1++)
{ {
btAlignedObjectArray<MyTexture2> textures; btAlignedObjectArray<MyTexture3> textures;
btAlignedObjectArray<GLInstanceVertex> vertices; btAlignedObjectArray<GLInstanceVertex> vertices;
btAlignedObjectArray<int> indices; btAlignedObjectArray<int> indices;
btTransform startTrans; btTransform startTrans;
@@ -716,15 +716,15 @@ void EGLRendererVisualShapeConverter::convertVisualShapes(
} }
} }
TinyRendererObjectArray** visualsPtr = m_data->m_swRenderInstances[collisionObjectUniqueId]; EGLRendererObjectArray** visualsPtr = m_data->m_swRenderInstances[collisionObjectUniqueId];
if (visualsPtr == 0) if (visualsPtr == 0)
{ {
m_data->m_swRenderInstances.insert(collisionObjectUniqueId, new TinyRendererObjectArray); m_data->m_swRenderInstances.insert(collisionObjectUniqueId, new EGLRendererObjectArray);
} }
visualsPtr = m_data->m_swRenderInstances[collisionObjectUniqueId]; visualsPtr = m_data->m_swRenderInstances[collisionObjectUniqueId];
btAssert(visualsPtr); btAssert(visualsPtr);
TinyRendererObjectArray* visuals = *visualsPtr; EGLRendererObjectArray* visuals = *visualsPtr;
visuals->m_objectUniqueId = bodyUniqueId; visuals->m_objectUniqueId = bodyUniqueId;
visuals->m_linkIndex = linkIndex; visuals->m_linkIndex = linkIndex;
@@ -870,11 +870,11 @@ void EGLRendererVisualShapeConverter::changeRGBAColor(int bodyUniqueId, int link
for (int i = 0; i < m_data->m_swRenderInstances.size(); i++) for (int i = 0; i < m_data->m_swRenderInstances.size(); i++)
{ {
TinyRendererObjectArray** ptrptr = m_data->m_swRenderInstances.getAtIndex(i); EGLRendererObjectArray** ptrptr = m_data->m_swRenderInstances.getAtIndex(i);
if (ptrptr && *ptrptr) if (ptrptr && *ptrptr)
{ {
float rgba[4] = {(float)rgbaColor[0], (float)rgbaColor[1], (float)rgbaColor[2], (float)rgbaColor[3]}; float rgba[4] = {(float)rgbaColor[0], (float)rgbaColor[1], (float)rgbaColor[2], (float)rgbaColor[3]};
TinyRendererObjectArray* visuals = *ptrptr; EGLRendererObjectArray* visuals = *ptrptr;
if ((bodyUniqueId == visuals->m_objectUniqueId) && (linkIndex == visuals->m_linkIndex)) if ((bodyUniqueId == visuals->m_objectUniqueId) && (linkIndex == visuals->m_linkIndex))
{ {
for (int q = 0; q < visuals->m_renderObjects.size(); q++) for (int q = 0; q < visuals->m_renderObjects.size(); q++)
@@ -1112,10 +1112,10 @@ void EGLRendererVisualShapeConverter::copyCameraImageData(unsigned char* pixelsR
void EGLRendererVisualShapeConverter::removeVisualShape(int collisionObjectUniqueId) void EGLRendererVisualShapeConverter::removeVisualShape(int collisionObjectUniqueId)
{ {
TinyRendererObjectArray** ptrptr = m_data->m_swRenderInstances[collisionObjectUniqueId]; EGLRendererObjectArray** ptrptr = m_data->m_swRenderInstances[collisionObjectUniqueId];
if (ptrptr && *ptrptr) if (ptrptr && *ptrptr)
{ {
TinyRendererObjectArray* ptr = *ptrptr; EGLRendererObjectArray* ptr = *ptrptr;
if (ptr) if (ptr)
{ {
for (int o = 0; o < ptr->m_renderObjects.size(); o++) for (int o = 0; o < ptr->m_renderObjects.size(); o++)
@@ -1132,10 +1132,10 @@ void EGLRendererVisualShapeConverter::resetAll()
{ {
for (int i = 0; i < m_data->m_swRenderInstances.size(); i++) for (int i = 0; i < m_data->m_swRenderInstances.size(); i++)
{ {
TinyRendererObjectArray** ptrptr = m_data->m_swRenderInstances.getAtIndex(i); EGLRendererObjectArray** ptrptr = m_data->m_swRenderInstances.getAtIndex(i);
if (ptrptr && *ptrptr) if (ptrptr && *ptrptr)
{ {
TinyRendererObjectArray* ptr = *ptrptr; EGLRendererObjectArray* ptr = *ptrptr;
if (ptr) if (ptr)
{ {
for (int o = 0; o < ptr->m_renderObjects.size(); o++) for (int o = 0; o < ptr->m_renderObjects.size(); o++)
@@ -1166,10 +1166,10 @@ void EGLRendererVisualShapeConverter::changeShapeTexture(int objectUniqueId, int
{ {
for (int n = 0; n < m_data->m_swRenderInstances.size(); n++) for (int n = 0; n < m_data->m_swRenderInstances.size(); n++)
{ {
TinyRendererObjectArray** visualArrayPtr = m_data->m_swRenderInstances.getAtIndex(n); EGLRendererObjectArray** visualArrayPtr = m_data->m_swRenderInstances.getAtIndex(n);
if (0 == visualArrayPtr) if (0 == visualArrayPtr)
continue; //can this ever happen? continue; //can this ever happen?
TinyRendererObjectArray* visualArray = *visualArrayPtr; EGLRendererObjectArray* visualArray = *visualArrayPtr;
if (visualArray->m_objectUniqueId == objectUniqueId && visualArray->m_linkIndex == jointIndex) if (visualArray->m_objectUniqueId == objectUniqueId && visualArray->m_linkIndex == jointIndex)
{ {
@@ -1188,7 +1188,7 @@ void EGLRendererVisualShapeConverter::changeShapeTexture(int objectUniqueId, int
int EGLRendererVisualShapeConverter::registerTexture(unsigned char* texels, int width, int height) int EGLRendererVisualShapeConverter::registerTexture(unsigned char* texels, int width, int height)
{ {
MyTexture2 texData; MyTexture3 texData;
texData.m_width = width; texData.m_width = width;
texData.m_height = height; texData.m_height = height;
texData.textureData1 = texels; texData.textureData1 = texels;
@@ -1212,10 +1212,10 @@ int EGLRendererVisualShapeConverter::loadTextureFile(const char* filename)
void EGLRendererVisualShapeConverter::syncTransform(int collisionObjectUniqueId, const btTransform& worldTransform, const btVector3& localScaling) void EGLRendererVisualShapeConverter::syncTransform(int collisionObjectUniqueId, const btTransform& worldTransform, const btVector3& localScaling)
{ {
TinyRendererObjectArray** renderObjPtr = m_data->m_swRenderInstances[collisionObjectUniqueId]; EGLRendererObjectArray** renderObjPtr = m_data->m_swRenderInstances[collisionObjectUniqueId];
if (renderObjPtr) if (renderObjPtr)
{ {
TinyRendererObjectArray* renderObj = *renderObjPtr; EGLRendererObjectArray* renderObj = *renderObjPtr;
renderObj->m_worldTransform = worldTransform; renderObj->m_worldTransform = worldTransform;
renderObj->m_localScaling = localScaling; renderObj->m_localScaling = localScaling;
if (renderObj->m_graphicsInstanceId >= 0) if (renderObj->m_graphicsInstanceId >= 0)

View File

@@ -16,7 +16,7 @@ project ("pybullet_eglRendererPlugin")
if os.is("Windows") then if os.is("Windows") then
files {"../../../OpenGLWindow/Win32OpenGLWindow.cpp", files {"../../../OpenGLWindow/Win32OpenGLWindow.cpp",
"../../../OpenGLWindow/Win32GLWindow.cpp",} "../../../OpenGLWindow/Win32Window.cpp",}
end end
if os.is("MacOSX") then if os.is("MacOSX") then
@@ -53,6 +53,7 @@ project ("pybullet_eglRendererPlugin")
"../../../ThirdPartyLibs/Wavefront/tiny_obj_loader.h", "../../../ThirdPartyLibs/Wavefront/tiny_obj_loader.h",
"../../../ThirdPartyLibs/stb_image/stb_image.cpp", "../../../ThirdPartyLibs/stb_image/stb_image.cpp",
"../../../ThirdPartyLibs/stb_image/stb_image.h", "../../../ThirdPartyLibs/stb_image/stb_image.h",
"../../../ThirdPartyLibs/stb_image/stb_image_write.cpp",
"../../../ThirdPartyLibs/tinyxml2/tinyxml2.cpp", "../../../ThirdPartyLibs/tinyxml2/tinyxml2.cpp",
"../../../ThirdPartyLibs/tinyxml2/tinyxml2.h", "../../../ThirdPartyLibs/tinyxml2/tinyxml2.h",
"../../../OpenGLWindow/SimpleCamera.cpp", "../../../OpenGLWindow/SimpleCamera.cpp",