Eliot Miranda uploaded a new version of VMMaker to project VM Maker: http://source.squeak.org/VMMaker/VMMaker.oscog-eem.1032.mcz
==================== Summary ====================
Name: VMMaker.oscog-eem.1032 Author: eem Time: 30 January 2015, 5:10:58.812 pm UUID: a3c915e6-d663-4d65-ab41-493c71498549 Ancestors: VMMaker.oscog-eem.1031
Eliminate some warnings in the B3DAcceleratorPlugin
=============== Diff against VMMaker.oscog-eem.1031 ===============
Item was changed: ----- Method: B3DAcceleratorPlugin>>loadClientState:vertices:colors:normals:texCoords: (in category 'primitives-qwaq') ----- loadClientState: handle vertices: vertices colors: colors normals: normals texCoords: texCoords "Common method to set up client state for some render ops" + | nilOop vtxSize sz colorPtr normalPtr txPtr vertexPtr ok | - | vtxSize sz colorPtr normalPtr txPtr vertexPtr ok | <var: #colorPtr type: 'void *'> <var: #normalPtr type: 'void *'> <var: #txPtr type: 'void *'> <var: #vertexPtr type: 'void *'>
colorPtr := normalPtr := txPtr := vertexPtr := nil. + sz := 0.
"Verify vertex data" + (interpreterProxy isWords: vertices) ifFalse: + [^interpreterProxy primitiveFail]. - (interpreterProxy isWords: vertices) - ifFalse:[^interpreterProxy primitiveFail]. vtxSize := (interpreterProxy slotSizeOf: vertices) / 3.
"Verify assumptions of color, normal, texCoords data" + nilOop := interpreterProxy nilObject. + (colors = nilOop + or: [(interpreterProxy isWords: colors) + and: [(interpreterProxy slotSizeOf: colors) = (vtxSize * 4)]]) ifFalse: + [^interpreterProxy primitiveFail]. + (normals = nilOop + or: [(interpreterProxy isWords: normals) + and: [(interpreterProxy slotSizeOf: normals) = (vtxSize * 3)]]) ifFalse: + [^interpreterProxy primitiveFail]. - (colors = interpreterProxy nilObject - or:[(interpreterProxy isWords: colors) - and:[(interpreterProxy slotSizeOf: colors) = (vtxSize * 4)]]) - ifFalse:[^interpreterProxy primitiveFail]. - (normals = interpreterProxy nilObject - or:[(interpreterProxy isWords: normals) - and:[(interpreterProxy slotSizeOf: normals) = (vtxSize * 3)]]) - ifFalse:[^interpreterProxy primitiveFail]. "Don't check size for texCoords since they can be 2,3,4 elements" + (texCoords = nilOop + or: [(interpreterProxy isWords: texCoords)]) ifFalse: + [^interpreterProxy primitiveFail]. - (texCoords = interpreterProxy nilObject - or:[(interpreterProxy isWords: texCoords)]) - ifFalse:[^interpreterProxy primitiveFail].
"Finally submit the data to OpenGL" + colors = nilOop ifFalse: + [colorPtr := interpreterProxy firstIndexableField: colors]. + normals = nilOop ifFalse: + [normalPtr := interpreterProxy firstIndexableField: normals]. + texCoords = nilOop ifFalse: + [sz := (interpreterProxy slotSizeOf: texCoords) / vtxSize. + txPtr := interpreterProxy firstIndexableField: texCoords]. - (colors = interpreterProxy nilObject) ifFalse:[ - colorPtr := interpreterProxy firstIndexableField: colors. - ]. - (normals = interpreterProxy nilObject) ifFalse:[ - normalPtr := interpreterProxy firstIndexableField: normals. - ]. - (texCoords = interpreterProxy nilObject) ifFalse:[ - sz := (interpreterProxy slotSizeOf: texCoords) / vtxSize. - txPtr := interpreterProxy firstIndexableField: texCoords. - ]. vertexPtr := interpreterProxy firstIndexableField: vertices. + interpreterProxy failed ifFalse: + [ok := self + cCode:'b3dLoadClientState(handle, vertexPtr, 3, colorPtr, 4, normalPtr, 3, txPtr, sz)' + inSmalltalk: [vertexPtr. colorPtr. normalPtr. txPtr. sz touch]. + ok ifFalse: [interpreterProxy primitiveFail]]. + ^nil "keep compiler quiet" - interpreterProxy failed ifTrue:[^nil]. - ok := self cCode:'b3dLoadClientState(handle, vertexPtr, 3, colorPtr, 4, normalPtr, 3, txPtr, sz)' - inSmalltalk:[vertexPtr. colorPtr. normalPtr. txPtr. sz false]. - ok ifFalse:[^interpreterProxy primitiveFail]. !
Item was changed: ----- Method: B3DAcceleratorPlugin>>primitiveDrawArrays (in category 'primitives-qwaq') ----- primitiveDrawArrays "Primitive. Setup non-VBO client state and call drawRangeElements in one go to avoid garbage collection to move the buffers underneith." | maxIdx minIdx mode texCoords normals colors vertices handle vtxSize ok | <export: true>
+ interpreterProxy methodArgumentCount = 8 ifFalse: + [^interpreterProxy primitiveFail]. - interpreterProxy methodArgumentCount = 8 - ifFalse:[^interpreterProxy primitiveFail].
maxIdx := interpreterProxy stackIntegerValue: 0. minIdx := interpreterProxy stackIntegerValue: 1. mode := interpreterProxy stackIntegerValue: 2. texCoords := interpreterProxy stackValue: 3. normals := interpreterProxy stackValue: 4. colors := interpreterProxy stackValue: 5. vertices := interpreterProxy stackValue: 6. handle := interpreterProxy stackIntegerValue: 7.
self loadClientState: handle vertices: vertices colors: colors normals: normals texCoords: texCoords. interpreterProxy failed ifTrue:[^nil]. + doRangeChecks ifTrue: + ["Verify the vertex data itself" - doRangeChecks ifTrue:[ - "Verify the vertex data itself" self checkVertexData: vertices.
"Verify min-max range in bounds for given vertex array" vtxSize := (interpreterProxy slotSizeOf: vertices) / 3. + (minIdx < 0 or:[minIdx > maxIdx or:[maxIdx > vtxSize]]) ifTrue: + [interpreterProxy primitiveFail]]. + interpreterProxy failed ifFalse: + [ok := self cCode: 'b3dDrawArrays(handle, mode, minIdx, maxIdx)' + inSmalltalk:[mode. false]. + ok ifTrue: + [interpreterProxy pop: interpreterProxy methodArgumentCount]]. + ^nil "keep compiler quiet" - (minIdx < 0 or:[minIdx > maxIdx or:[maxIdx > vtxSize]]) - ifTrue:[^interpreterProxy primitiveFail]. - ]. - interpreterProxy failed ifTrue:[^nil]. - ok := self cCode: 'b3dDrawArrays(handle, mode, minIdx, maxIdx)' - inSmalltalk:[mode. false]. - ok ifFalse:[^interpreterProxy primitiveFail]. - interpreterProxy failed - ifFalse:[interpreterProxy pop: interpreterProxy methodArgumentCount]. !
Item was changed: ----- Method: B3DAcceleratorPlugin>>primitiveDrawElements (in category 'primitives-qwaq') ----- primitiveDrawElements "Primitive. Setup non-VBO client state and call drawElements in one go to avoid garbage collection to move the buffers underneith." | faces mode texCoords normals colors vertices handle ok facePtr faceSize | <export: true> <var: #facePtr type: 'unsigned int *'>
+ interpreterProxy methodArgumentCount = 7 ifFalse: + [^interpreterProxy primitiveFail]. - interpreterProxy methodArgumentCount = 7 - ifFalse:[^interpreterProxy primitiveFail].
faces := interpreterProxy stackValue: 0. + (interpreterProxy isWords: faces) ifFalse: + [^interpreterProxy primitiveFail]. - (interpreterProxy isWords: faces) - ifFalse:[^interpreterProxy primitiveFail]. faceSize := interpreterProxy slotSizeOf: faces. facePtr := interpreterProxy firstIndexableField: faces.
mode := interpreterProxy stackIntegerValue: 1. texCoords := interpreterProxy stackValue: 2. normals := interpreterProxy stackValue: 3. colors := interpreterProxy stackValue: 4. vertices := interpreterProxy stackValue: 5. handle := interpreterProxy stackIntegerValue: 6.
self loadClientState: handle vertices: vertices colors: colors normals: normals texCoords: texCoords. interpreterProxy failed ifTrue:[^nil].
+ doRangeChecks ifTrue: + ["Verify the vertex data itself" - doRangeChecks ifTrue:[ - "Verify the vertex data itself" self checkVertexData: vertices. "Change bounds range to make sure the data is valid" + self checkBoundsRange: vertices faces: facePtr count: faceSize]. - self checkBoundsRange: vertices faces: facePtr count: faceSize. - ].
+ interpreterProxy failed ifFalse: + [ok := self cCode: 'b3dDrawElements(handle, mode, faceSize, facePtr)' + inSmalltalk:[mode. facePtr. false]. + ok ifTrue: + [interpreterProxy pop: interpreterProxy methodArgumentCount]]. + ^nil "keep compiler quiet" - interpreterProxy failed ifTrue:[^nil]. - ok := self cCode: 'b3dDrawElements(handle, mode, faceSize, facePtr)' - inSmalltalk:[mode. facePtr. false]. - ok ifFalse:[^interpreterProxy primitiveFail]. - interpreterProxy failed - ifFalse:[interpreterProxy pop: interpreterProxy methodArgumentCount]. !
Item was changed: ----- Method: B3DAcceleratorPlugin>>primitiveDrawRangeElements (in category 'primitives-qwaq') ----- primitiveDrawRangeElements "Primitive. Setup non-VBO client state and call drawRangeElements in one go to avoid garbage collection to move the buffers underneith." | faces maxIdx minIdx mode texCoords normals colors vertices handle vtxSize ok facePtr faceSize | <export: true> <var: #facePtr type: 'unsigned int *'>
+ interpreterProxy methodArgumentCount = 9 ifFalse: + [^interpreterProxy primitiveFail]. - interpreterProxy methodArgumentCount = 9 - ifFalse:[^interpreterProxy primitiveFail].
faces := interpreterProxy stackValue: 0. + (interpreterProxy isWords: faces) ifFalse: + [^interpreterProxy primitiveFail]. - (interpreterProxy isWords: faces) - ifFalse:[^interpreterProxy primitiveFail]. faceSize := interpreterProxy slotSizeOf: faces. facePtr := interpreterProxy firstIndexableField: faces.
maxIdx := interpreterProxy stackIntegerValue: 1. minIdx := interpreterProxy stackIntegerValue: 2. mode := interpreterProxy stackIntegerValue: 3. texCoords := interpreterProxy stackValue: 4. normals := interpreterProxy stackValue: 5. colors := interpreterProxy stackValue: 6. vertices := interpreterProxy stackValue: 7. handle := interpreterProxy stackIntegerValue: 8.
self loadClientState: handle vertices: vertices colors: colors normals: normals texCoords: texCoords. interpreterProxy failed ifTrue:[^nil].
+ doRangeChecks ifTrue: + ["Verify the vertex data itself" - doRangeChecks ifTrue:[ - "Verify the vertex data itself" self checkVertexData: vertices. "Change bounds range to make sure the data is valid" self checkBoundsRange: vertices faces: facePtr count: faceSize. "Verify min-max range in bounds for given vertex array" vtxSize := (interpreterProxy slotSizeOf: vertices) / 3. + (minIdx < 0 or:[minIdx > maxIdx or:[maxIdx > vtxSize]]) ifTrue: + [interpreterProxy primitiveFail]]. - (minIdx < 0 or:[minIdx > maxIdx or:[maxIdx > vtxSize]]) - ifTrue:[^interpreterProxy primitiveFail]. - ].
+ interpreterProxy failed ifFalse: + [ok := self cCode: 'b3dDrawRangeElements(handle, mode, minIdx, maxIdx, faceSize, facePtr)' + inSmalltalk:[mode. facePtr. false]. + ok ifTrue: + [interpreterProxy pop: interpreterProxy methodArgumentCount]]. + ^nil "keep compiler quiet" - interpreterProxy failed ifTrue:[^nil]. - ok := self cCode: 'b3dDrawRangeElements(handle, mode, minIdx, maxIdx, faceSize, facePtr)' - inSmalltalk:[mode. facePtr. false]. - ok ifFalse:[^interpreterProxy primitiveFail]. - interpreterProxy failed - ifFalse:[interpreterProxy pop: interpreterProxy methodArgumentCount]. !
Item was changed: ----- Method: B3DAcceleratorPlugin>>primitiveEnableDrawRangeChecks (in category 'primitives-qwaq') ----- primitiveEnableDrawRangeChecks "Primitive. Enable/disable draw (range) checks" | enabled | <export: true> + interpreterProxy methodArgumentCount = 0 ifTrue: + [interpreterProxy pop: 1. + ^interpreterProxy pushBool: doRangeChecks]. + interpreterProxy methodArgumentCount = 1 ifTrue: + [enabled := interpreterProxy booleanValueOf: (interpreterProxy stackValue: 0). + interpreterProxy failed ifFalse: + [doRangeChecks := enabled. + ^interpreterProxy pop: 1]]. "pop arg; return rcvr" + ^nil "keep compiler quiet"! - interpreterProxy methodArgumentCount = 0 ifTrue:[ - interpreterProxy pop: 1. - ^interpreterProxy pushBool: doRangeChecks. - ]. - interpreterProxy methodArgumentCount = 1 ifTrue:[ - enabled := interpreterProxy booleanValueOf: (interpreterProxy stackValue: 0). - interpreterProxy failed ifTrue:[^nil]. - doRangeChecks := enabled. - ^interpreterProxy pop: 1. "pop arg; return recvr" - ].!
Item was removed: - ----- Method: B3DAcceleratorPlugin>>stackPrimitiveVertex: (in category 'primitive support') ----- - stackPrimitiveVertex: index - "Load a primitive vertex from the interpreter stack. - Return a pointer to the vertex data if successful, nil otherwise." - | oop | - <inline: false> - returnTypeC:'void*' - oop := interpreterProxy stackObjectValue: index. - oop = nil ifTrue:[^nil]. - ((interpreterProxy isWords: oop) and:[(interpreterProxy slotSizeOf: oop) = 16]) - ifTrue:[^interpreterProxy firstIndexableField: oop]. - ^nil!
vm-dev@lists.squeakfoundation.org