// instrument this a bit like QGLWidget by adding a // a context so we can choose GL version rgb size etc. // This can be done with a context object at some stage. EGLWindow::EGLWindow(EGLconfig *_config) { // toggle we don't yet have an active surface m_activeSurface=false; // set default to not upscale the screen resolution m_upscale=false; // set our display values to 0 (not once ported to cx11 will use nullptr but // current pi default compiler doesn't support it yet m_display=0; m_context=0; m_surface=0; // now find the max display size (we will use this later to assert if the user // defined sizes are in the correct bounds int32_t success = 0; success = graphics_get_display_size(0 , &m_width, &m_height); assert( success >= 0 ); std::cout<<"max width and height "<<m_width<<" "<<m_height<<"\n"; m_maxWidth=m_width; m_maxHeight=m_height; // if we have a user defined config we will use that else we need to create one if (_config == 0) { std::cout<<"making new config\n"; m_config= new EGLconfig(); } else { m_config=_config; } // this code actually creates the surface makeSurface(0,0,m_width,m_height); }
// This function creates a cylinder similarly to the teapot // and the torus above. This time the cylinder is trimmed with // a circle defined by 9 square-based control points to show // an example of defining a circle without using infinite control // points (see [Piegl and Tiller], pp. 299, Ex7.2 (Figure 7.16)) as // well as to show how to define a rational trimming curve. NodePtr makeTrimmedCylinder() { SimpleMaterialPtr cylmat = SimpleMaterial::create(); beginEditCP(cylmat); { cylmat->setDiffuse( Color3f(0.0, 0.8, 0.7)); cylmat->setAmbient( Color3f(0.2, 0.2, 0.2)); cylmat->setEmission( Color3f(0.02, 0.02, 0.02) ); cylmat->setSpecular( Color3f(0.78, 0.78, 0.78) ); cylmat->setShininess( 128 ); cylmat->addChunk(g_fb_chunk); } endEditCP(cylmat); float knots4[4] = {0, 0, 1, 1}; float knots_circle[8] = {0, 0, 0, 0.5, 0.5, 1, 1, 1}; float knots_outertrim[7] = {0, 0, 1, 2, 3, 4, 4}; float knots_trimcircle[12] = {0, 0, 0, 0.25, 0.25, 0.5, 0.5, 0.75, 0.75, 1, 1, 1 }; float cylcps[10][4] = { { 1.00, 0, -.50, 1}, { 1.00, 0, .50, 1}, { 0, 1.00, 0, 0}, { 0, 1.00, 0, 0}, {-1.00, 0, -.50, 1}, {-1.00, 0, .50, 1}, { 0, -1.00, 0, 0}, { 0, -1.00, 0, 0}, { 1.00, 0, -.50, 1}, { 1.00, 0, .50, 1}, }; float outertrim_cps[5][2] = { {0, 0}, {1, 0}, {1, 1}, {0, 1}, {0, 0}, }; float trimcircle_cps[9][3] = { {0.541667, 0.5, 1}, {0.383016, 0.235702, 0.707107}, {0.5, 0.333333, 1}, {0.324091, 0.235702, 0.707107}, {0.458333, 0.5, 1}, {0.324091, 0.471405, 0.707107}, {0.5, 0.666667, 1}, {0.383016, 0.471405, 0.707107}, {0.541667, 0.5, 1}, }; NodePtr cylnode = makeSurface(10, cylcps, 2, 1, 8, knots_circle, 4, knots4, 0.001, cylmat); SurfacePtr s = SurfacePtr::dcast(cylnode->getCore()); // add outer trimming around the domain addTrimCurve(s, 5, outertrim_cps, 1, 7, knots_outertrim, true); // add inside circle trimming addTrimCurve(s, 9, trimcircle_cps, 2, 12, knots_trimcircle, true); return cylnode; }
/** * @brief Object construction method * * Constructs an Object by giving it stats. * * It tracks down the geometry by using the stats and initializes the necessary attributes to * work properly. * * @param stats A reference to a set of object properties */ Object::Object(ObjectStats *stats) { this->stats = stats; id = 0; source = -1; lastInput = 0; surface = new Surface; makeSurface(stats->ps->type, stats->ps->kind, surface); surface->box = &(stats->ps->box); this->updateGeometry(); }
Frame* Factory::makeFrame(const string& s) { std::map<const string, SDL_Surface *>::iterator it = surfaceMap.find(s); SDL_Surface *tempSurface; if(it == surfaceMap.end()) { tempSurface = makeSurface(s); } else { tempSurface = getSurface(s); } if(frameMap.count(s) == 0) frameMap.insert(std::map<const string, Frame *>::value_type(s, new Frame(tempSurface, io->getScreen(), tempSurface->w, tempSurface->h, 0, 0))); return(getFrame(s)); }
// This function creates a torus from a single NURBS surface // using only 25 control points (of which 12 are unique). // Similarly to the teapot, this uses the half-circle // constructed from 3 control points (of which the middle point // is infinite) which is then mirrored to form a full circle. // (See the NURBS book [Piegl and Tiller], pp. 296, Ex7.1 (Figure 7.15) // for details on the half-circle.) NodePtr makeTorus() { SimpleMaterialPtr torusmat = SimpleMaterial::create(); beginEditCP(torusmat); { torusmat->setDiffuse( Color3f(1.0, 0.0, 0.2)); torusmat->setAmbient( Color3f(0.2, 0.2, 0.2)); torusmat->setEmission( Color3f(0.02, 0.02, 0.02) ); torusmat->setSpecular( Color3f(0.78, 0.78, 0.78) ); torusmat->setShininess( 128 ); torusmat->addChunk(g_fb_chunk); } endEditCP(torusmat); float knots_circle[8] = {0, 0, 0, 0.5, 0.5, 1, 1, 1}; float toruscps[25][4] = { { 1.00, 0, .75, 1}, // { .25, 0, 0, 0}, // { 1.00, 0, 1.25, 1}, // { -.25, 0, 0, 0}, // { 1.00, 0, .75, 1}, { 0, 1.00, 0, 0}, // { 0, .25, 0, 0}, // { 0, 1.00, 0, 0}, { 0, -.25, 0, 0}, // { 0, 1.00, 0, 0}, {-1.00, 0, .75, 1}, // { -.25, 0, 0, 0}, // {-1.00, 0, 1.25, 1}, // { .25, 0, 0, 0}, // {-1.00, 0, .75, 1}, { 0, -1.00, 0, 0}, // { 0, -.25, 0, 0}, { 0, -1.00, 0, 0}, { 0, .25, 0, 0}, { 0, -1.00, 0, 0}, { 1.00, 0, .75, 1}, { .25, 0, 0, 0}, { 1.00, 0, 1.25, 1}, { -.25, 0, 0, 0}, { 1.00, 0, .75, 1}, }; NodePtr torus = makeSurface(25, toruscps, 2, 2, 8, knots_circle, 8, knots_circle, 0.005, torusmat); return torus; }
#include "UnsortedMeshedSurfaces.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // namespace Foam { // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // #define makeSurface(surfType, faceType) \ defineNamedTemplateTypeNameAndDebug(surfType<faceType>, 0); \ defineTemplatedRunTimeSelectionTable(surfType,fileExtension,faceType); \ defineTemplatedMemberFunctionSelectionTable \ ( \ surfType, \ write, \ fileExtension, \ faceType \ ); makeSurface(UnsortedMeshedSurface, face) makeSurface(UnsortedMeshedSurface, triFace) // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // } // End namespace Foam // ************************************************************************* //
#include "MeshedSurfaceProxy.H" #include "addToRunTimeSelectionTable.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // namespace Foam { // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // #define makeSurface(surfType, faceType) \ defineNamedTemplateTypeNameAndDebug(surfType<faceType>, 0); \ defineTemplatedMemberFunctionSelectionTable \ ( \ surfType, \ write, \ fileExtension, \ faceType \ ); makeSurface(MeshedSurfaceProxy, face) makeSurface(MeshedSurfaceProxy, triFace) // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // } // End namespace Foam // ************************************************************************* //
void EGLWindow::setScreen(uint32_t _x, uint32_t _y, uint32_t _w, uint32_t _h) { // destroy our surface the make a new one destroySurface(); makeSurface(_x,_y,_w,_h); }
void EGLWindow::resizeScreen(uint32_t _w, uint32_t _h) { destroySurface(); makeSurface(0,0,_w,_h); }
You should have received a copy of the GNU General Public License along with foam-extend. If not, see <http://www.gnu.org/licenses/>. \*---------------------------------------------------------------------------*/ #include "objectRegistry.H" #include "MeshedSurfaces.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // namespace Foam { // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // #define makeSurface(surfType, faceType) \ defineNamedTemplateTypeNameAndDebug(surfType<faceType>, 0); \ defineTemplatedRunTimeSelectionTable(surfType,fileExtension,faceType); \ defineTemplatedMemberFunctionSelectionTable(surfType,write,fileExtension,faceType); makeSurface(MeshedSurface, face) makeSurface(MeshedSurface, triFace) // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // } // End namespace Foam // ************************************************************************* //
// This function creates the classic Utah teapot from 4 NURBS // surfaces: one surface each for the lid, body, handle and spout. // The "classic" representation is using 18 rational Bezier patches, // but in order to show the construction of more complex surfaces // these have been combined into as few NURBS surfaces as possible. NodePtr makeTeapot() { SimpleMaterialPtr teapotmat = SimpleMaterial::create(); beginEditCP(teapotmat); { teapotmat->setDiffuse( Color3f(0.8, 0.8, 0.8)); teapotmat->setAmbient( Color3f(0.2, 0.2, 0.2)); teapotmat->setEmission( Color3f(0.02, 0.02, 0.02) ); teapotmat->setSpecular( Color3f(0.78, 0.78, 0.78) ); teapotmat->setShininess( 128 ); teapotmat->addChunk(g_fb_chunk); } endEditCP(teapotmat); NodePtr teapotroot = makeCoredNode<Group>(); float knots11[11] = {0, 0, 0, 0, 0.5, 0.5, 0.5, 1, 1, 1, 1}; float knots14[14] = {0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 3}; float knots_circle[8] = {0, 0, 0, 0.5, 0.5, 1, 1, 1}; float lidcps[35][4] = { { 0.0000, 4.0000, 0.0000, 1.0000}, { 0.0000, 4.0000, 0.8000, 1.0000}, { 0.0000, 3.6000, 0.0000, 1.0000}, { 0.0000, 3.4000, 0.2000, 1.0000}, { 0.0000, 3.2000, 0.4000, 1.0000}, { 0.0000, 3.2000, 1.3000, 1.0000}, { 0.0000, 3.0000, 1.3000, 1.0000}, {-0.0000, 0.0000, 0.0000, 0.0000}, {-0.8000, 0.0000, 0.0000, 0.0000}, {-0.0000, 0.0000, 0.0000, 0.0000}, {-0.2000, 0.0000, 0.0000, 0.0000}, {-0.4000, 0.0000, 0.0000, 0.0000}, {-1.3000, 0.0000, 0.0000, 0.0000}, {-1.3000, 0.0000, 0.0000, 0.0000}, { 0.0000, 4.0000,-0.0000, 1.0000}, { 0.0000, 4.0000,-0.8000, 1.0000}, { 0.0000, 3.6000,-0.0000, 1.0000}, { 0.0000, 3.4000,-0.2000, 1.0000}, { 0.0000, 3.2000,-0.4000, 1.0000}, { 0.0000, 3.2000,-1.3000, 1.0000}, { 0.0000, 3.0000,-1.3000, 1.0000}, { 0.0000, 0.0000, 0.0000, 0.0000}, { 0.8000, 0.0000, 0.0000, 0.0000}, { 0.0000, 0.0000, 0.0000, 0.0000}, { 0.2000, 0.0000, 0.0000, 0.0000}, { 0.4000, 0.0000, 0.0000, 0.0000}, { 1.3000, 0.0000, 0.0000, 0.0000}, { 1.3000, 0.0000, 0.0000, 0.0000}, { 0.0000, 4.0000, 0.0000, 1.0000}, { 0.0000, 4.0000, 0.8000, 1.0000}, { 0.0000, 3.6000, 0.0000, 1.0000}, { 0.0000, 3.4000, 0.2000, 1.0000}, { 0.0000, 3.2000, 0.4000, 1.0000}, { 0.0000, 3.2000, 1.3000, 1.0000}, { 0.0000, 3.0000, 1.3000, 1.0000}, }; NodePtr lid = makeSurface(35, lidcps, 2, 3, 8, knots_circle, 11, knots11, 0.005, teapotmat); float bodycps[50][4] = { { 0.0000, 3.0000, 1.4000, 1.0000}, { 0.0000, 3.1750, 1.3375, 1.0000}, { 0.0000, 3.1750, 1.4375, 1.0000}, { 0.0000, 3.0000, 1.5000, 1.0000}, { 0.0000, 2.3000, 1.7500, 1.0000}, { 0.0000, 1.6000, 2.0000, 1.0000}, { 0.0000, 1.0000, 2.0000, 1.0000}, { 0.0000, 0.4000, 2.0000, 1.0000}, { 0.0000, 0.2000, 1.5000, 1.0000}, { 0.0000, 0.0000, 1.5000, 1.0000}, {-1.4000, 0.0000, 0.0000, 0.0000}, {-1.3375, 0.0000, 0.0000, 0.0000}, {-1.4375, 0.0000, 0.0000, 0.0000}, {-1.5000, 0.0000, 0.0000, 0.0000}, {-1.7500, 0.0000, 0.0000, 0.0000}, {-2.0000, 0.0000, 0.0000, 0.0000}, {-2.0000, 0.0000, 0.0000, 0.0000}, {-2.0000, 0.0000, 0.0000, 0.0000}, {-1.5000, 0.0000, 0.0000, 0.0000}, {-1.5000, 0.0000, 0.0000, 0.0000}, { 0.0000, 3.0000,-1.4000, 1.0000}, { 0.0000, 3.1750,-1.3375, 1.0000}, { 0.0000, 3.1750,-1.4375, 1.0000}, { 0.0000, 3.0000,-1.5000, 1.0000}, { 0.0000, 2.3000,-1.7500, 1.0000}, { 0.0000, 1.6000,-2.0000, 1.0000}, { 0.0000, 1.0000,-2.0000, 1.0000}, { 0.0000, 0.4000,-2.0500, 1.0000}, { 0.0000, 0.2000,-1.5000, 1.0000}, { 0.0000, 0.0000,-1.5000, 1.0000}, { 1.4000, 0.0000, 0.0000, 0.0000}, { 1.3375, 0.0000, 0.0000, 0.0000}, { 1.4375, 0.0000, 0.0000, 0.0000}, { 1.5000, 0.0000, 0.0000, 0.0000}, { 1.7500, 0.0000, 0.0000, 0.0000}, { 2.0000, 0.0000, 0.0000, 0.0000}, { 2.0000, 0.0000, 0.0000, 0.0000}, { 2.0000, 0.0000, 0.0000, 0.0000}, { 1.5000, 0.0000, 0.0000, 0.0000}, { 1.5000, 0.0000, 0.0000, 0.0000}, { 0.0000, 3.0000, 1.4000, 1.0000}, { 0.0000, 3.1750, 1.3375, 1.0000}, { 0.0000, 3.1750, 1.4375, 1.0000}, { 0.0000, 3.0000, 1.5000, 1.0000}, { 0.0000, 2.3000, 1.7500, 1.0000}, { 0.0000, 1.6000, 2.0000, 1.0000}, { 0.0000, 1.0000, 2.0000, 1.0000}, { 0.0000, 0.4000, 2.0000, 1.0000}, { 0.0000, 0.2000, 1.5000, 1.0000}, { 0.0000, 0.0000, 1.5000, 1.0000}, }; NodePtr body = makeSurface(50, bodycps, 2, 3, 8, knots_circle, 14, knots14, 0.005, teapotmat); float handlecps[35][4] = { { 1.5000, 2.8000, 0.0000, 1.0000}, { 2.5000, 2.8000, 0.0000, 1.0000}, { 3.0000, 2.8000, 0.0000, 1.0000}, { 3.0000, 2.2000, 0.0000, 1.0000}, { 3.0000, 1.6000, 0.0000, 1.0000}, { 2.6500, 1.0500, 0.0000, 1.0000}, { 1.9000, 0.6000, 0.0000, 1.0000}, { 0.0000, 0.0000, 0.3000, 0.0000}, { 0.0000, 0.0000, 0.3000, 0.0000}, { 0.0000, 0.0000, 0.3000, 0.0000}, { 0.0000, 0.0000, 0.3000, 0.0000}, { 0.0000, 0.0000, 0.3000, 0.0000}, { 0.0000, 0.0000, 0.3000, 0.0000}, { 0.0000, 0.0000, 0.3000, 0.0000}, { 1.6000, 2.5000, 0.0000, 1.0000}, { 2.3000, 2.5000, 0.0000, 1.0000}, { 2.7000, 2.5000, 0.0000, 1.0000}, { 2.7000, 2.2000, 0.0000, 1.0000}, { 2.7000, 1.9000, 0.0000, 1.0000}, { 2.5000, 1.5000, 0.0000, 1.0000}, { 2.0000, 1.0000, 0.0000, 1.0000}, { 0.0000, 0.0000,-0.3000, 0.0000}, { 0.0000, 0.0000,-0.3000, 0.0000}, { 0.0000, 0.0000,-0.3000, 0.0000}, { 0.0000, 0.0000,-0.3000, 0.0000}, { 0.0000, 0.0000,-0.3000, 0.0000}, { 0.0000, 0.0000,-0.3000, 0.0000}, { 0.0000, 0.0000,-0.3000, 0.0000}, { 1.5000, 2.8000, 0.0000, 1.0000}, { 2.5000, 2.8000, 0.0000, 1.0000}, { 3.0000, 2.8000, 0.0000, 1.0000}, { 3.0000, 2.2000, 0.0000, 1.0000}, { 3.0000, 1.6000, 0.0000, 1.0000}, { 2.6500, 1.0500, 0.0000, 1.0000}, { 1.9000, 0.6000, 0.0000, 1.0000}, }; NodePtr handle = makeSurface(35, handlecps, 2, 3, 8, knots_circle, 11, knots11, 0.005, teapotmat); float spoutcps[35][4] = { {-1.7000, 0.6000, 0.0000, 1.0000}, {-3.1000, 0.9000, 0.0000, 1.0000}, {-2.4000, 2.6000, 0.0000, 1.0000}, {-3.3000, 3.0000, 0.0000, 1.0000}, {-3.5250, 3.1250, 0.0000, 1.0000}, {-3.4500, 3.1500, 0.0000, 1.0000}, {-3.2000, 3.0000, 0.0000, 1.0000}, { 0.0000, 0.0000, 0.6600, 0.0000}, { 0.0000, 0.0000, 0.6600, 0.0000}, { 0.0000, 0.0000, 0.2500, 0.0000}, { 0.0000, 0.0000, 0.2500, 0.0000}, { 0.0000, 0.0000, 0.2500, 0.0000}, { 0.0000, 0.0000, 0.1500, 0.0000}, { 0.0000, 0.0000, 0.1500, 0.0000}, {-1.7000, 1.7000, 0.0000, 1.0000}, {-2.6000, 1.7000, 0.0000, 1.0000}, {-2.3000, 2.6000, 0.0000, 1.0000}, {-2.7000, 3.0000, 0.0000, 1.0000}, {-2.8000, 3.1000, 0.0000, 1.0000}, {-2.9000, 3.1000, 0.0000, 1.0000}, {-2.8000, 3.0000, 0.0000, 1.0000}, { 0.0000, 0.0000,-0.6600, 0.0000}, { 0.0000, 0.0000,-0.6600, 0.0000}, { 0.0000, 0.0000,-0.2500, 0.0000}, { 0.0000, 0.0000,-0.2500, 0.0000}, { 0.0000, 0.0000,-0.2500, 0.0000}, { 0.0000, 0.0000,-0.1500, 0.0000}, { 0.0000, 0.0000,-0.1500, 0.0000}, {-1.7000, 0.6000, 0.0000, 1.0000}, {-3.1000, 0.9000, 0.0000, 1.0000}, {-2.4000, 2.6000, 0.0000, 1.0000}, {-3.3000, 3.0000, 0.0000, 1.0000}, {-3.5250, 3.1250, 0.0000, 1.0000}, {-3.4500, 3.1500, 0.0000, 1.0000}, {-3.2000, 3.0000, 0.0000, 1.0000}, }; NodePtr spout = makeSurface(35, spoutcps, 2, 3, 8, knots_circle, 11, knots11, 0.005, teapotmat); beginEditCP(teapotroot); teapotroot->addChild(lid); teapotroot->addChild(body); teapotroot->addChild(handle); teapotroot->addChild(spout); endEditCP(teapotroot); return teapotroot; }
void EGLWindow::makeSurface() { makeSurface(0,0,m_width,m_height); }