[GEM-cvs] SF.net SVN: pd-gem:[3658] trunk/Gem/src/Base
Brought to you by:
zmoelnig
From: <zmo...@us...> - 2011-01-31 14:48:24
|
Revision: 3658 http://pd-gem.svn.sourceforge.net/pd-gem/?rev=3658&view=rev Author: zmoelnig Date: 2011-01-31 14:48:17 +0000 (Mon, 31 Jan 2011) Log Message: ----------- use GemState.set/get rather than directly accessing the member vars Modified Paths: -------------- trunk/Gem/src/Base/GemPixDualObj.cpp trunk/Gem/src/Base/GemPixObj.cpp trunk/Gem/src/Base/GemShape.cpp trunk/Gem/src/Base/GemShape.h trunk/Gem/src/Base/GemState.cpp trunk/Gem/src/Base/GemState.h Modified: trunk/Gem/src/Base/GemPixDualObj.cpp =================================================================== --- trunk/Gem/src/Base/GemPixDualObj.cpp 2011-01-31 13:05:11 UTC (rev 3657) +++ trunk/Gem/src/Base/GemPixDualObj.cpp 2011-01-31 14:48:17 UTC (rev 3658) @@ -199,15 +199,14 @@ ///////////////////////////////////////////////////////// void GemPixDualObj :: rightRender(GemState *statePtr) { - if (!statePtr || !statePtr->image) { + if (!statePtr || !statePtr->get("pix", m_pixRight)) { m_pixRightValid = 0; m_pixRight = 0; return; } m_pixRightValid = 1; - m_pixRight = statePtr->image; - if (statePtr->image->newimage)setPixModified(); // force the left arm to create a new image + if (m_pixRight->newimage)setPixModified(); // force the left arm to create a new image } ///////////////////////////////////////////////////////// Modified: trunk/Gem/src/Base/GemPixObj.cpp =================================================================== --- trunk/Gem/src/Base/GemPixObj.cpp 2011-01-31 13:05:11 UTC (rev 3657) +++ trunk/Gem/src/Base/GemPixObj.cpp 2011-01-31 14:48:17 UTC (rev 3658) @@ -54,70 +54,73 @@ // change formats, sizes, databuffer, whatever // the data is restored in the <postrender> call, // so that the objects can rely on their (buffered) images - if (!state || !state->image || !&state->image->image)return; - cachedPixBlock.newimage=state->image->newimage; - if (!state->image->newimage) { - state->image = &cachedPixBlock; + pixBlock*image=NULL; + if (!state || !state->get("pix", image))return; + if(!image || + !&image->image) return; + cachedPixBlock.newimage=image->newimage; + if (!image->newimage) { + image = &cachedPixBlock; } else { - orgPixBlock = state->image; - cachedPixBlock.newimage = state->image->newimage; - cachedPixBlock.newfilm = state->image->newfilm; //added for newfilm copy from cache cgc 6-21-03 - state->image->image.copy2ImageStruct(&cachedPixBlock.image); - state->image = &cachedPixBlock; + orgPixBlock = image; + cachedPixBlock.newimage = image->newimage; + cachedPixBlock.newfilm = image->newfilm; //added for newfilm copy from cache cgc 6-21-03 + image->image.copy2ImageStruct(&cachedPixBlock.image); + image = &cachedPixBlock; if (m_processOnOff){ - switch(state->image->image.format){ + switch(image->image.format){ case GL_RGBA: case GL_BGRA_EXT: switch(m_simd){ case(GEM_SIMD_MMX): - processRGBAMMX(state->image->image); + processRGBAMMX(image->image); break; case(GEM_SIMD_SSE2): - processRGBASSE2(state->image->image); + processRGBASSE2(image->image); break; case(GEM_SIMD_ALTIVEC): - processRGBAAltivec(state->image->image); + processRGBAAltivec(image->image); break; default: - processRGBAImage(state->image->image); + processRGBAImage(image->image); } break; case GL_RGB: case GL_BGR_EXT: - processRGBImage(state->image->image); + processRGBImage(image->image); break; case GL_LUMINANCE: switch(m_simd){ case(GEM_SIMD_MMX): - processGrayMMX(state->image->image); + processGrayMMX(image->image); break; case(GEM_SIMD_SSE2): - processGraySSE2(state->image->image); + processGraySSE2(image->image); break; case(GEM_SIMD_ALTIVEC): - processGrayAltivec(state->image->image); + processGrayAltivec(image->image); break; default: - processGrayImage(state->image->image); + processGrayImage(image->image); } break; case GL_YCBCR_422_GEM: switch(m_simd){ case(GEM_SIMD_MMX): - processYUVMMX(state->image->image); + processYUVMMX(image->image); break; case(GEM_SIMD_SSE2): - processYUVSSE2(state->image->image); + processYUVSSE2(image->image); break; case(GEM_SIMD_ALTIVEC): - processYUVAltivec(state->image->image); + processYUVAltivec(image->image); break; default: - processYUVImage(state->image->image); + processYUVImage(image->image); } break; default: - processImage(state->image->image); + processImage(image->image); } } } Modified: trunk/Gem/src/Base/GemShape.cpp =================================================================== --- trunk/Gem/src/Base/GemShape.cpp 2011-01-31 13:05:11 UTC (rev 3657) +++ trunk/Gem/src/Base/GemShape.cpp 2011-01-31 14:48:17 UTC (rev 3658) @@ -58,15 +58,24 @@ void GemShape :: SetVertex(GemState* state,float x, float y, float z, float tx, float ty,int curCoord) { int i; - if (state->numTexCoords) { + + TexCoord*texcoords=NULL; + int numCoords = 0; + int numUnits = 0; + + state->get("gl.tex.numcoords", numCoords); + state->get("gl.tex.units", numUnits); + + + if (numCoords) { tx=state->texCoordX(curCoord); ty=state->texCoordY(curCoord); } - - if (state->multiTexUnits) { - for( i=0; i<state->multiTexUnits; i++) { + + if (numUnits) { + for( i=0; i<numUnits; i++) { glMultiTexCoord2fARB(GL_TEXTURE0+i, tx, ty); - } + } } else { // no multitexturing! glTexCoord2f(tx, ty); } @@ -78,13 +87,21 @@ int curCoord) { int i; - if (state->numTexCoords) { + int numCoords = 0; + int numUnits = 0; + + state->get("gl.tex.numcoords", numCoords); + state->get("gl.tex.units", numUnits); + + + + if (numCoords) { s*=state->texCoordX(curCoord); t*=state->texCoordY(curCoord); } - if (state->multiTexUnits) { - for( i=0; i<state->multiTexUnits; i++) + if (numUnits) { + for( i=0; i<numUnits; i++) glMultiTexCoord4fARB(GL_TEXTURE0+i, s, t, r, q); } else { // no multitexturing! glTexCoord4f(s, t, r, q); @@ -174,6 +191,16 @@ glHint(GL_POLYGON_SMOOTH_HINT,GL_DONT_CARE); } + m_texType=0; + m_texNum =0; + m_texCoords=NULL; + m_lighting=false; + + state->get("gl.tex.coords", m_texCoords); + state->get("gl.tex.type", m_texType); + state->get("gl.tex.numcoords", m_texNum); + state->get("gl.lighting", m_lighting); + renderShape(state); // LATER try to restore the original state Modified: trunk/Gem/src/Base/GemShape.h =================================================================== --- trunk/Gem/src/Base/GemShape.h 2011-01-31 13:05:11 UTC (rev 3657) +++ trunk/Gem/src/Base/GemShape.h 2011-01-31 14:48:17 UTC (rev 3658) @@ -33,6 +33,7 @@ "width" - the line width when drawing with lines -----------------------------------------------------------------*/ +class TexCoord; class GEM_EXTERN GemShape : public GemBase { public: @@ -132,6 +133,12 @@ static void typeMessCallback(void *data, t_symbol *type); static void sizeMessCallback(void *data, t_floatarg size); static void blendMessCallback(void *data, t_floatarg size); + + + protected: + int m_texType, m_texNum; + TexCoord*m_texCoords; + bool m_lighting; }; #endif // for header file Modified: trunk/Gem/src/Base/GemState.cpp =================================================================== --- trunk/Gem/src/Base/GemState.cpp 2011-01-31 13:05:11 UTC (rev 3657) +++ trunk/Gem/src/Base/GemState.cpp 2011-01-31 14:48:17 UTC (rev 3658) @@ -27,6 +27,10 @@ #include <iostream> +#ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wdeprecated-declarations" +#endif + using namespace gem; class GemStateData { @@ -52,7 +56,7 @@ protected: // dictionary for setting values - std::map <t_symbol*, any> data; + std::map <std::string, any> data; std::auto_ptr<GLStack>stacks; }; @@ -177,10 +181,37 @@ /* get a named property */ -bool GemState::get(t_symbol*key, any&value) { - std::map<t_symbol*,any>::iterator it = data->data.find(key); +bool GemState::get(const std::string key, any&value) { + std::map<std::string,any>::iterator it = data->data.find(key); + if(it==data->data.end()) { + if(key=="dirty") { value=dirty; return true; } + if(key=="gl.displaylist") { value=inDisplayList; return true; } - if(it==data->data.end()) { + if(key=="gllighting") { value=lighting; return true; } + if(key=="gl.smooth") { value=smooth; return true; } + if(key=="gl.tex.type") { value=texture; return true; } + if(key=="pix") { value=image; return true; } + if(key=="gl.tex.coords") { if(!texCoords)return false; value=texCoords; return true; } + if(key=="gl.tex.numcoords") { value=numTexCoords; return true; } + if(key=="gl.tex.units") { value=multiTexUnits; return true; } + if(key=="timing.tick") { value=tickTime; return true; } + if(key=="gl.drawtype") { value=drawType; return true; } + +#if 0 + //if(key=="gl.stacks") { value=stackDepth[4]; return true; } + + if(key=="vertex.dirty") { value=VertexDirty; return true; } + if(key=="*VertexArray") { value=*VertexArray; return true; } + if(key=="VertexArraySize") { value=VertexArraySize; return true; } + if(key=="VertexArrayStride") { value=VertexArrayStride; return true; } + if(key=="*ColorArray") { value=*ColorArray; return true; } + if(key=="HaveColorArray") { value=HaveColorArray; return true; } + if(key=="*NormalArray") { value=*NormalArray; return true; } + if(key=="HaveNormalArray") { value=HaveNormalArray; return true; } + if(key=="*TexCoordArray") { value=*TexCoordArray; return true; } + if(key=="HaveTexCoordArray") { value=HaveTexCoordArray; return true; } +#endif + return false; } @@ -189,21 +220,32 @@ } /* set a named property */ -bool GemState::set(t_symbol*key, any value) { +bool GemState::set(const std::string key, any value) { if(value.empty()) { data->data.erase(key); return false; } /* wrapper for DEPRECATED access to member variables */ - // ... + if(key=="dirty") { try { dirty=gem::any_cast<bool>(value); } catch (gem::bad_any_cast) {} } + if(key=="gl.displaylist") { try { inDisplayList=gem::any_cast<bool>(value); } catch (gem::bad_any_cast) {} } + if(key=="gllighting") { try { lighting=gem::any_cast<bool>(value); } catch (gem::bad_any_cast) {} } + if(key=="gl.smooth") { try { smooth=gem::any_cast<bool>(value); } catch (gem::bad_any_cast) {} } + if(key=="gl.tex.type") { try { texture=gem::any_cast<int>(value); } catch (gem::bad_any_cast) {} } + if(key=="pix") { try { image=gem::any_cast<pixBlock*>(value); } catch (gem::bad_any_cast) {} } + if(key=="gl.tex.coords") { try { texCoords=gem::any_cast<TexCoord*>(value); } catch (gem::bad_any_cast) {} } + if(key=="gl.tex.numcoords") { try { numTexCoords=gem::any_cast<int>(value); } catch (gem::bad_any_cast) {} } + if(key=="gl.tex.units") { try { multiTexUnits=gem::any_cast<int>(value); } catch (gem::bad_any_cast) {} } + if(key=="timing.tick") { try { tickTime=gem::any_cast<float>(value); } catch (gem::bad_any_cast) {} } + if(key=="gl.drawtype") { try { drawType=gem::any_cast<GLenum>(value); } catch (gem::bad_any_cast) {} } + data->data[key]=value; return true; } /* remove a named property */ -bool GemState::remove(t_symbol*key) { +bool GemState::remove(const std::string key) { return (0!=data->data.erase(key)); } Modified: trunk/Gem/src/Base/GemState.h =================================================================== --- trunk/Gem/src/Base/GemState.h 2011-01-31 13:05:11 UTC (rev 3657) +++ trunk/Gem/src/Base/GemState.h 2011-01-31 14:48:17 UTC (rev 3658) @@ -100,7 +100,7 @@ ////////// // The number of TexCoords - // deprecated: use property 'gl.tex.coords' instead + // deprecated: use property 'gl.tex.numcoords' instead GEM_DEPRECATED int numTexCoords; ////////// @@ -173,11 +173,11 @@ * the value of the 2nd argument is set accordingly and <code>true</code> is returned * if the key does not exist (or the type is wrong) the value is not touched and <code>false</code> is returned instead */ - virtual bool get(t_symbol*key, gem::any&value); - virtual bool get(const char*key, gem::any value) {return get(gensym(key), value);} + virtual bool get(const std::string key, gem::any&value); + virtual bool get(const t_symbol*key, gem::any&value) { return get(key->s_name, value); } template<class T> - bool get(t_symbol*key, T&value) { + bool get(const std::string key, T&value) { try { gem::any val; if(!get(key,val)) { @@ -192,17 +192,16 @@ return false; }; template<class T> - bool get(const char*key, T&value) { - return get(gensym(key), value); + bool get(const t_symbol*key, T&value) { + return get(key->s_name, value); } /* set a named property */ - virtual bool set(t_symbol*key, gem::any value); - virtual bool set(const char*key, gem::any value) {return set(gensym(key), value);} - + virtual bool set(const std::string key, gem::any value); + virtual bool set(const t_symbol*key, gem::any value) { return set(key->s_name, value); } /* remove a named property */ - virtual bool remove(t_symbol*key); - virtual bool remove(const char*key) { return remove(gensym(key));} + virtual bool remove(const std::string key); + virtual bool remove(const t_symbol*key) { return remove(key->s_name);} // Copy assignment GemState& operator=(const GemState&); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |