From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=0.2 required=5.0 tests=BAYES_00,INVALID_MSGID, REPLYTO_WITHOUT_TO_CC autolearn=no autolearn_force=no version=3.4.4 X-Google-Language: ENGLISH,ASCII-7-bit X-Google-Thread: 103376,fbb2432d0a728c1b X-Google-Attributes: gid103376,public From: wemagor@sym1.cca.rockwell.com_nospam (Wayne Magor) Subject: Re: help with pointerproblem. Date: 1998/09/11 Message-ID: <6ta4lf$e0b1@onews.collins.rockwell.com>#1/1 X-Deja-AN: 389978847 Distribution: world Sender: wemagor@sym1.cca.rockwell.com (Wayne Magor) References: <35f7f673.0@newsfeed.uu.se> <35f88e65.0@news.pacifier.com> Organization: Rockwell Collins - Avionics Reply-To: No@Junk.Mail Newsgroups: comp.lang.ada Date: 1998-09-11T00:00:00+00:00 List-Id: "Steve Doiel" writes: >Roger Carlsson wrote in message <35f7f673.0@newsfeed.uu.se>... >>Hello. >> >>I'm writing a program in ada95 with opengl on W95. >> >>I have the following definitions in GL.ads: >> >>type GLubyte is new C.unsigned_char; >>type GLpointer is access all GLubyte; -- our substitute for "void *" >> >>and >> >>procedure (.......; x : GLpointer); >> >> >>My own types: >> >>type VertexArray is array (NATURAL range <>) of aliased GLfloat; >>type VertexArrayPtr is access VertexArray; >> >> >>and in the program: >>VPtr : VertexArrayPtr; >>..... >> >>VPtr := new VertexArray(0 .. n); >> >> >>procedure(....., GLpointer(VPtr)); >> >>I want to give the procedure my VertexArray as argument x. >>My question is: How do i convert my VertexarrayPtr to a GLpointer? >>I have tried different solutions but the compiler complains like: >>Target designated type not compatible with type VertexArray. >> >>If i can not. Can i rewrite my own types so it works? >>The VertexArray must hold GLfloat's. >> > > >You could give the following a shot. > >with System.Address_To_Access_Conversions; >. >. >package ToGlPointerPackage is new > System.Address_To_Access_Conversions( GLUbyte ); > >function ToGLpointer( vPtr : VertexArrayPtr) return GLPointer IS >begin > return GLPointer( ToGlPointerPackage.To_Pointer( vPtr.ALL'ADDRESS ) ); >end ToGLpointer; > >I'm not sure about correctness, but it makes the compiler happy. Since VertexArray is unconstrained, there will have to be a descriptor someplace. It's likely the pointer points to the descriptor instead of the data. I'd prefer to take the 'address of element zero of the array. Seems to me that's more likely to work across nearly all platforms. Like this: return GLPointer (ToGlPointerPackage.To_Pointer (vPtr(0)'Address)); Wayne.