diff options
author | danfe <danfe@FreeBSD.org> | 2007-08-16 19:28:18 +0800 |
---|---|---|
committer | danfe <danfe@FreeBSD.org> | 2007-08-16 19:28:18 +0800 |
commit | add30d7d6d00dd3e7096b6f5648589136d0fb178 (patch) | |
tree | e235d34fe7bb5ffda52e733bf484e7cd2ac0606c /x11-toolkits/nucleo | |
parent | f00c3bd2c7e29f176ed8bc753190020c5445998e (diff) | |
download | freebsd-ports-gnome-add30d7d6d00dd3e7096b6f5648589136d0fb178.tar.gz freebsd-ports-gnome-add30d7d6d00dd3e7096b6f5648589136d0fb178.tar.zst freebsd-ports-gnome-add30d7d6d00dd3e7096b6f5648589136d0fb178.zip |
Fix the build on amd64 (and possibly other 64-bit arches).
Obtained from: Mandriva SRPM
Diffstat (limited to 'x11-toolkits/nucleo')
-rw-r--r-- | x11-toolkits/nucleo/files/patch-mandriva-64bit-fixes | 157 |
1 files changed, 157 insertions, 0 deletions
diff --git a/x11-toolkits/nucleo/files/patch-mandriva-64bit-fixes b/x11-toolkits/nucleo/files/patch-mandriva-64bit-fixes new file mode 100644 index 000000000000..8dade80d2529 --- /dev/null +++ b/x11-toolkits/nucleo/files/patch-mandriva-64bit-fixes @@ -0,0 +1,157 @@ +2007-01-17 Gwenole Beauchesne <gbeauchesne@mandriva.com> + + * 64-bit fixes. + +--- nucleo/gl/scenegraph/sgNode.H.64bit-fixes 2006-11-29 12:37:37.000000000 +0100 ++++ nucleo/gl/scenegraph/sgNode.H 2007-01-17 16:18:29.000000000 +0100 +@@ -24,6 +24,8 @@ namespace nucleo { + + class sgNode { + ++ GLuint _id ; ++ + public: + + typedef enum {NODL, USE, CREATE} dlPolicy ; +@@ -65,7 +67,17 @@ namespace nucleo { + + void debug(std::ostream& out, int curdepth=0) const ; + +- // -------------------------------------------------------- ++ // ------------------------------------------------------- ++ ++ GLuint getId() const { ++ return _id ; ++ } ++ ++ static GLuint createId(sgNode * const node); ++ static sgNode * const lookupId(GLuint id); ++ static void destroyId(GLuint id); ++ ++ // ------------------------------------------------------- + + std::string &getName() { + return _name ; +--- nucleo/gl/scenegraph/sgNode.cxx.64bit-fixes 2006-11-29 12:37:37.000000000 +0100 ++++ nucleo/gl/scenegraph/sgNode.cxx 2007-01-18 16:04:53.000000000 +0100 +@@ -15,6 +15,17 @@ + + #include <math.h> + ++#if defined __GNUC__ ++#include <ext/hash_map> ++typedef __gnu_cxx::hash_map<GLuint, void *> sgNodeMap; ++#endif ++ ++#if defined __LP64__ ++/* 64-bit Linux platforms may be able to set this to 0 assuming there ++ is no memory leak and/or brk() can grow reasonably (2^31 nowadays?). */ ++#define USE_SG_NODE_MAP 1 ++#endif ++ + static GLfloat Identity[16] = { + 1.0, 0.0, 0.0, 0.0, + 0.0, 1.0, 0.0, 0.0, +@@ -173,6 +184,46 @@ namespace nucleo { + + // ------------------------------------------------------------------------ + ++ static sgNodeMap sgNodes; ++ ++ GLuint ++ sgNode::createId(sgNode * const node) { ++#if USE_SG_NODE_MAP ++ static GLuint id = 0x66600000; /* FIXME: set to 0 when debugged! */ ++ sgNodes[++id] = (void *)node; ++ if (debugMode) ++ std::cout << "sgNode::createId: node " << std::hex << node << ", id " << id << std::endl; ++ return id; ++#else ++ if ((((uintptr_t)node) >> 32) != 0) ++ std::cout << "sgNode::createId: got a 64-bit addressed node " << std::hex << node << std::endl; ++ return (uintptr_t)node; ++#endif ++ } ++ ++ sgNode * const ++ sgNode::lookupId(GLuint id) { ++#if USE_SG_NODE_MAP ++ sgNodeMap::const_iterator it = sgNodes.find(id); ++ if (it != sgNodes.end()) ++ return (sgNode *)(*it).second; ++ if (debugMode) ++ std::cout << "sgNode::lookupId: id " << std::hex << id << " not found" << std::endl; ++ return NULL; ++#else ++ return (sgNode *)(uintptr_t)id; ++#endif ++ } ++ ++ void ++ sgNode::destroyId(GLuint id) { ++#if USE_SG_NODE_MAP ++ sgNodes.erase(id); ++#endif ++ } ++ ++ // ------------------------------------------------------------------------ ++ + void + sgNode::debug(std::ostream& out, int curdepth) const { + for (int i=0; i<curdepth; ++i) out << " " ; +@@ -197,10 +248,12 @@ namespace nucleo { + memmove(_savedTransformations,Identity,16*sizeof(GLfloat)) ; + _changed = true ; + _hidden = false; ++ _id = sgNode::createId(this); + } + + sgNode::~sgNode(void) { + if (_displaylist) glDeleteLists(_displaylist,1) ; ++ sgNode::destroyId(_id); + } + + // ------------------------------------------------------------------------ +@@ -285,8 +338,8 @@ namespace nucleo { + // if (debugMode) std::cout << "select '" << _name << "' (" << this << ")" << std::endl ; + if (_hidden) return; + if (debugPushName) +- std::cerr << "sgNode::selectGraph: pushing " << std::hex << (GLuint)this << " " << (GLuint)(sgNode *)this << std::dec << std::endl ; +- glPushName((GLuint)(sgNode *)this) ; ++ std::cerr << "sgNode::selectGraph: pushing " << std::hex << this << " " << (sgNode *)this << std::dec << std::endl ; ++ glPushName(getId()) ; + glPushMatrix() ; + glMultMatrixf((const GLfloat *)_transformations) ; + select() ; +--- nucleo/gl/scenegraph/sgViewpoint.cxx.64bit-fixes 2006-11-29 23:34:31.000000000 +0100 ++++ nucleo/gl/scenegraph/sgViewpoint.cxx 2007-01-17 16:18:29.000000000 +0100 +@@ -131,7 +131,7 @@ namespace nucleo { + glGetDoublev(GL_PROJECTION_MATRIX, projmatrix) ; + + for (int i=0; i<selectionBufferSize; ++i) { +- sgNode *o = (sgNode *)selectionBuffer[i] ; ++ sgNode *o = sgNode::lookupId(selectionBuffer[i]) ; + #if DEBUG_LEVEL>=1 + std::cerr << o->getName() << " < " << std::flush ; + #endif +@@ -174,7 +174,7 @@ namespace nucleo { + + for (int i=0; i<selectionBufferSize; ++i) + { +- sgNode *o = (sgNode *)selectionBuffer[i] ; ++ sgNode *o = sgNode::lookupId(selectionBuffer[i]) ; + o->applyTransformations() ; + } + +--- nucleo/gl/window/glWindow_GLX.cxx.64bit-fixes 2006-11-29 23:34:31.000000000 +0100 ++++ nucleo/gl/window/glWindow_GLX.cxx 2007-01-18 16:07:00.000000000 +0100 +@@ -1378,7 +1382,8 @@ namespace nucleo { + e->time = CurrentTime; + break; + case ClientMessage: +- if ((unsigned)xe.xclient.data.l[0] == wmDeleteWindow) { ++ if (xe.xclient.format == 32 && ++ (unsigned long)xe.xclient.data.l[0] == wmDeleteWindow) { + e->type = glWindow::event::destroy; + } + e->time = CurrentTime; |