[Vm-dev] VM Maker: VMMaker.oscog-eem.2479.mcz
commits at source.squeak.org
commits at source.squeak.org
Tue Oct 30 01:01:39 UTC 2018
Eliot Miranda uploaded a new version of VMMaker to project VM Maker:
http://source.squeak.org/VMMaker/VMMaker.oscog-eem.2479.mcz
==================== Summary ====================
Name: VMMaker.oscog-eem.2479
Author: eem
Time: 29 October 2018, 6:00:57.748695 pm
UUID: b191888c-6777-483b-82b4-121103743ebf
Ancestors: VMMaker.oscog-eem.2478
Plugins:
Fix slip in primitiveDirectoryDelimitor.
Eliminate cCode:inSmalltalk:'s from the B3DAcceleratorPlugin
=============== Diff against VMMaker.oscog-eem.2478 ===============
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 |
<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].
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].
"Don't check size for texCoords since they can be 2,3,4 elements"
(texCoords = nilOop
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].
vertexPtr := interpreterProxy firstIndexableField: vertices.
interpreterProxy failed ifFalse:
+ [ok := self b3dLoadClientState: handle _: vertexPtr _: 3 _: colorPtr _: 4 _: normalPtr _: 3 _: txPtr _: sz.
- [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"
!
Item was changed:
----- Method: B3DAcceleratorPlugin>>primitiveAllocateTexture (in category 'primitives-textures') -----
primitiveAllocateTexture
| h w d result renderer |
<export: true>
interpreterProxy methodArgumentCount = 4
ifFalse:[^interpreterProxy primitiveFail].
h := interpreterProxy stackIntegerValue: 0.
w := interpreterProxy stackIntegerValue: 1.
d := interpreterProxy stackIntegerValue: 2.
renderer := interpreterProxy stackIntegerValue: 3.
interpreterProxy failed ifTrue:[^nil].
+ result := self b3dxAllocateTexture: renderer _: w _: h _: d.
- result := self cCode:'b3dxAllocateTexture(renderer, w, h, d)' inSmalltalk:[-1].
result = -1 ifTrue:[^interpreterProxy primitiveFail].
interpreterProxy pop: 5. "args+rcvr"
^interpreterProxy pushInteger: result.!
Item was changed:
----- Method: B3DAcceleratorPlugin>>primitiveCompositeTexture (in category 'primitives-textures') -----
primitiveCompositeTexture
| result translucent y x w h texHandle rendererHandle |
<export: true>
interpreterProxy methodArgumentCount = 7
ifFalse:[^interpreterProxy primitiveFail].
translucent := interpreterProxy booleanValueOf: (interpreterProxy stackValue: 0).
h := interpreterProxy stackIntegerValue: 1.
w := interpreterProxy stackIntegerValue: 2.
y := interpreterProxy stackIntegerValue: 3.
x := interpreterProxy stackIntegerValue: 4.
texHandle := interpreterProxy stackIntegerValue: 5.
rendererHandle := interpreterProxy stackIntegerValue: 6.
interpreterProxy failed ifTrue:[^nil].
+ result := self b3dxCompositeTexture: rendererHandle _: texHandle _: x _: y _: w _: h _: translucent.
- result := self cCode:'b3dxCompositeTexture(rendererHandle, texHandle, x, y, w, h, translucent)' inSmalltalk:[false].
result ifFalse:[^interpreterProxy primitiveFail].
^interpreterProxy pop: 7. "args"
!
Item was changed:
----- Method: B3DAcceleratorPlugin>>primitiveDestroyRenderer (in category 'primitives-renderer') -----
primitiveDestroyRenderer
| handle result |
<export: true>
interpreterProxy methodArgumentCount = 1
ifFalse:[^interpreterProxy primitiveFail].
handle := interpreterProxy stackIntegerValue: 0.
interpreterProxy failed ifTrue:[^nil].
+ result := self b3dxDestroyRenderer: handle.
- result := self cCode:'b3dxDestroyRenderer(handle)' inSmalltalk:[false].
result ifFalse:[^interpreterProxy primitiveFail].
^interpreterProxy pop: 1. "pop arg; return rcvr"!
Item was changed:
----- Method: B3DAcceleratorPlugin>>primitiveDestroyTexture (in category 'primitives-textures') -----
primitiveDestroyTexture
| handle result renderer |
<export: true>
interpreterProxy methodArgumentCount = 2
ifFalse:[^interpreterProxy primitiveFail].
handle := interpreterProxy stackIntegerValue: 0.
renderer := interpreterProxy stackIntegerValue: 1.
interpreterProxy failed ifTrue:[^nil].
+ result := self b3dxDestroyTexture: renderer _: handle.
- result := self cCode:'b3dxDestroyTexture(renderer, handle)' inSmalltalk:[false].
result ifFalse:[^interpreterProxy primitiveFail].
^interpreterProxy pop: 2. "pop arg; return rcvr"!
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].
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"
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 b3dDrawArrays: handle _: mode _: minIdx _: maxIdx.
- [ok := self cCode: 'b3dDrawArrays(handle, mode, minIdx, maxIdx)'
- inSmalltalk:[mode. false].
ok ifTrue:
[interpreterProxy pop: interpreterProxy methodArgumentCount]].
^nil "keep compiler quiet"
!
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].
faces := interpreterProxy stackValue: 0.
(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"
self checkVertexData: vertices.
"Change bounds range to make sure the data is valid"
self checkBoundsRange: vertices faces: facePtr count: faceSize].
interpreterProxy failed ifFalse:
+ [ok := self b3dDrawElements: handle _: mode _: faceSize _: facePtr.
- [ok := self cCode: 'b3dDrawElements(handle, mode, faceSize, facePtr)'
- inSmalltalk:[mode. facePtr. false].
ok ifTrue:
[interpreterProxy pop: interpreterProxy methodArgumentCount]].
^nil "keep compiler quiet"
!
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].
faces := interpreterProxy stackValue: 0.
(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"
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]].
interpreterProxy failed ifFalse:
+ [ok := self b3dDrawRangeElements: handle _: mode _: minIdx _: maxIdx _: faceSize _: facePtr.
- [ok := self cCode: 'b3dDrawRangeElements(handle, mode, minIdx, maxIdx, faceSize, facePtr)'
- inSmalltalk:[mode. facePtr. false].
ok ifTrue:
[interpreterProxy pop: interpreterProxy methodArgumentCount]].
^nil "keep compiler quiet"
!
Item was changed:
----- Method: B3DAcceleratorPlugin>>primitiveFinishRenderer (in category 'primitives-renderer') -----
primitiveFinishRenderer
| handle result |
<export: true>
interpreterProxy methodArgumentCount = 1
ifFalse:[^interpreterProxy primitiveFail].
handle := interpreterProxy stackIntegerValue: 0.
interpreterProxy failed ifTrue:[^nil].
+ result := self b3dxFinishRenderer: handle.
- result := self cCode:'b3dxFinishRenderer(handle)' inSmalltalk:[false].
result ifFalse:[^interpreterProxy primitiveFail].
^interpreterProxy pop: 1. "pop arg; return rcvr"!
Item was changed:
----- Method: B3DAcceleratorPlugin>>primitiveFlushRenderer (in category 'primitives-renderer') -----
primitiveFlushRenderer
| handle result |
<export: true>
interpreterProxy methodArgumentCount = 1
ifFalse:[^interpreterProxy primitiveFail].
handle := interpreterProxy stackIntegerValue: 0.
interpreterProxy failed ifTrue:[^nil].
+ result := self b3dxFlushRenderer: handle.
- result := self cCode:'b3dxFlushRenderer(handle)' inSmalltalk:[false].
result ifFalse:[^interpreterProxy primitiveFail].
^interpreterProxy pop: 1. "pop arg; return rcvr"!
Item was changed:
----- Method: B3DAcceleratorPlugin>>primitiveGetRendererColorMasks (in category 'primitives-renderer') -----
primitiveGetRendererColorMasks
| handle masks array |
<export: true>
<var: #masks declareC:'unsigned int masks[4]'>
interpreterProxy methodArgumentCount = 2
ifFalse:[^interpreterProxy primitiveFail].
array := interpreterProxy stackObjectValue: 0.
handle := interpreterProxy stackIntegerValue: 1.
interpreterProxy failed ifTrue:[^nil].
((interpreterProxy isArray: array)
and: [(interpreterProxy slotSizeOf: array) = 4
+ and: [self b3dxGetRendererColorMasks: handle _: masks]])
- and: [self cCode:'b3dxGetRendererColorMasks(handle, masks)' inSmalltalk:[false]]])
ifFalse:[^interpreterProxy primitiveFail].
interpreterProxy pushRemappableOop: array.
0 to: 3 do: [:i|
interpreterProxy
storePointer: i
ofObject: interpreterProxy topRemappableOop
withValue: (interpreterProxy positive32BitIntegerFor: (masks at: i))].
interpreterProxy popRemappableOop.
^interpreterProxy pop: 2 "pop args return receiver"!
Item was changed:
----- Method: B3DAcceleratorPlugin>>primitiveGetRendererSurfaceDepth (in category 'primitives-renderer') -----
primitiveGetRendererSurfaceDepth
| handle result |
<export: true>
interpreterProxy methodArgumentCount = 1
ifFalse:[^interpreterProxy primitiveFail].
handle := interpreterProxy stackIntegerValue: 0.
interpreterProxy failed ifTrue:[^nil].
+ result := self b3dxGetRendererSurfaceDepth: handle.
- result := self cCode:'b3dxGetRendererSurfaceDepth(handle)' inSmalltalk:[-1].
result < 0 ifTrue:[^interpreterProxy primitiveFail].
interpreterProxy pop: 2. "args+rcvr"
^interpreterProxy pushInteger: result!
Item was changed:
----- Method: B3DAcceleratorPlugin>>primitiveGetRendererSurfaceHandle (in category 'primitives-renderer') -----
primitiveGetRendererSurfaceHandle
| handle result |
<export: true>
interpreterProxy methodArgumentCount = 1
ifFalse:[^interpreterProxy primitiveFail].
handle := interpreterProxy stackIntegerValue: 0.
interpreterProxy failed ifTrue:[^nil].
+ result := self b3dxGetRendererSurfaceHandle: handle.
- result := self cCode:'b3dxGetRendererSurfaceHandle(handle)' inSmalltalk:[-1].
result < 0 ifTrue:[^interpreterProxy primitiveFail].
interpreterProxy pop: 2. "args+rcvr"
^interpreterProxy pushInteger: result!
Item was changed:
----- Method: B3DAcceleratorPlugin>>primitiveGetRendererSurfaceHeight (in category 'primitives-renderer') -----
primitiveGetRendererSurfaceHeight
| handle result |
<export: true>
interpreterProxy methodArgumentCount = 1
ifFalse:[^interpreterProxy primitiveFail].
handle := interpreterProxy stackIntegerValue: 0.
interpreterProxy failed ifTrue:[^nil].
+ result := self b3dxGetRendererSurfaceHeight: handle.
- result := self cCode:'b3dxGetRendererSurfaceHeight(handle)' inSmalltalk:[-1].
result < 0 ifTrue:[^interpreterProxy primitiveFail].
interpreterProxy pop: 2. "args+rcvr"
^interpreterProxy pushInteger: result!
Item was changed:
----- Method: B3DAcceleratorPlugin>>primitiveGetRendererSurfaceWidth (in category 'primitives-renderer') -----
primitiveGetRendererSurfaceWidth
| handle result |
<export: true>
interpreterProxy methodArgumentCount = 1
ifFalse:[^interpreterProxy primitiveFail].
handle := interpreterProxy stackIntegerValue: 0.
interpreterProxy failed ifTrue:[^nil].
+ result := self b3dxGetRendererSurfaceWidth: handle.
- result := self cCode:'b3dxGetRendererSurfaceWidth(handle)' inSmalltalk:[-1].
result < 0 ifTrue:[^interpreterProxy primitiveFail].
interpreterProxy pop: 2. "args+rcvr"
^interpreterProxy pushInteger: result!
Item was changed:
----- Method: B3DAcceleratorPlugin>>primitiveIsOverlayRenderer (in category 'primitives-renderer') -----
primitiveIsOverlayRenderer
| handle result |
<export: true>
interpreterProxy methodArgumentCount = 1
ifFalse:[^interpreterProxy primitiveFail].
handle := interpreterProxy stackIntegerValue: 0.
interpreterProxy failed ifTrue:[^nil].
+ result := self b3dxIsOverlayRenderer: handle.
- result := self cCode:'b3dxIsOverlayRenderer(handle)' inSmalltalk:[false].
interpreterProxy pop: 2. "args+rcvr"
^interpreterProxy pushBool: result.!
Item was changed:
----- Method: B3DAcceleratorPlugin>>primitiveRenderVertexBuffer (in category 'primitives-renderer') -----
primitiveRenderVertexBuffer
| idxCount vtxCount vtxArray idxArray texHandle primType result flags handle |
<export: true>
<var: #idxArray type: 'int *'>
<var: #vtxArray type: 'float *'>
interpreterProxy methodArgumentCount = 8
ifFalse:[^interpreterProxy primitiveFail].
idxCount := interpreterProxy stackIntegerValue: 0.
vtxCount := interpreterProxy stackIntegerValue: 2.
texHandle := interpreterProxy stackIntegerValue: 4.
flags := interpreterProxy stackIntegerValue: 5.
primType := interpreterProxy stackIntegerValue: 6.
handle := interpreterProxy stackIntegerValue: 7.
interpreterProxy failed ifTrue:[^nil].
vtxArray := self stackPrimitiveVertexArray: 3 ofSize: vtxCount.
idxArray := self stackPrimitiveIndexArray: 1 ofSize: idxCount validate: true forVertexSize: vtxCount.
(vtxArray == nil or:[idxArray == nil
or:[primType < 1 or:[primType > 6
or:[interpreterProxy failed]]]])
ifTrue:[^interpreterProxy primitiveFail].
+ result := self b3dxRenderVertexBuffer: handle _: primType _: flags _: texHandle _: vtxArray _: vtxCount _: idxArray _: idxCount.
- result := self cCode:'b3dxRenderVertexBuffer(handle, primType, flags, texHandle, vtxArray, vtxCount, idxArray, idxCount)' inSmalltalk:[false].
result ifFalse:[^interpreterProxy primitiveFail].
^interpreterProxy pop: 8. "pop args; return rcvr"!
Item was changed:
----- Method: B3DAcceleratorPlugin>>primitiveSetLights (in category 'primitives-renderer') -----
primitiveSetLights
| lightArray lightCount light handle |
<export: true>
+ <var: #light type: #'void *'>
- <inline: false>
- <var: #light type: 'void*'>
interpreterProxy methodArgumentCount = 2
ifFalse:[^interpreterProxy primitiveFail].
lightArray := self stackLightArrayValue: 0.
handle := interpreterProxy stackIntegerValue: 1.
interpreterProxy failed ifTrue:[^nil].
(self b3dxDisableLights: handle)
ifFalse:[^interpreterProxy primitiveFail].
+ lightArray ifNil: [^nil].
- lightArray == nil ifTrue:[^nil].
lightCount := interpreterProxy slotSizeOf: lightArray.
"For each enabled light source"
0 to: lightCount-1 do:[:i|
light := self fetchLightSource: i ofObject: lightArray.
+ (self b3dxLoadLight: handle _: i _: light) ifFalse:
+ [^interpreterProxy primitiveFail].
- (self cCode:'b3dxLoadLight(handle, i, light)' inSmalltalk:[false])
- ifFalse:[^interpreterProxy primitiveFail].
].
^interpreterProxy pop: 2. "args; return rcvr"!
Item was changed:
----- Method: B3DAcceleratorPlugin>>primitiveSetMaterial (in category 'primitives-renderer') -----
primitiveSetMaterial
| material handle |
<export: true>
<inline: false>
<var: #material type: 'void*'>
interpreterProxy methodArgumentCount = 2
ifFalse:[^interpreterProxy primitiveFail].
material := self stackMaterialValue: 0.
handle := interpreterProxy stackIntegerValue: 1.
+ (self b3dxLoadMaterial: handle _: material)
- (self cCode:'b3dxLoadMaterial(handle, material)' inSmalltalk:[false])
ifFalse:[^interpreterProxy primitiveFail].
^interpreterProxy pop: 2. "args; return rcvr"!
Item was changed:
----- Method: B3DAcceleratorPlugin>>primitiveSwapRendererBuffers (in category 'primitives-renderer') -----
primitiveSwapRendererBuffers
| handle result |
<export: true>
interpreterProxy methodArgumentCount = 1
ifFalse:[^interpreterProxy primitiveFail].
handle := interpreterProxy stackIntegerValue: 0.
interpreterProxy failed ifTrue:[^nil].
+ result := self b3dxSwapRendererBuffers: handle.
- result := self cCode:'b3dxSwapRendererBuffers(handle)' inSmalltalk:[false].
result ifFalse:[^interpreterProxy primitiveFail].
^interpreterProxy pop: 1. "pop arg; return rcvr"!
Item was changed:
----- Method: B3DAcceleratorPlugin>>primitiveTextureByteSex (in category 'primitives-textures') -----
primitiveTextureByteSex
| handle result renderer |
<export: true>
interpreterProxy methodArgumentCount = 2
ifFalse:[^interpreterProxy primitiveFail].
handle := interpreterProxy stackIntegerValue: 0.
renderer := interpreterProxy stackIntegerValue: 1.
interpreterProxy failed ifTrue:[^nil].
+ result := self b3dxTextureByteSex: renderer _: handle.
- result := self cCode:'b3dxTextureByteSex(renderer, handle)' inSmalltalk:[-1].
result < 0 ifTrue:[^interpreterProxy primitiveFail].
interpreterProxy pop: 3.
^interpreterProxy pushBool: result.!
Item was changed:
----- Method: B3DAcceleratorPlugin>>primitiveTextureDepth (in category 'primitives-textures') -----
primitiveTextureDepth
| handle result renderer |
<export: true>
interpreterProxy methodArgumentCount = 2
ifFalse:[^interpreterProxy primitiveFail].
handle := interpreterProxy stackIntegerValue: 0.
renderer := interpreterProxy stackIntegerValue: 1.
interpreterProxy failed ifTrue:[^nil].
+ result := self b3dxActualTextureDepth: renderer _: handle.
- result := self cCode:'b3dxActualTextureDepth(renderer, handle)' inSmalltalk:[-1].
result < 0 ifTrue:[^interpreterProxy primitiveFail].
interpreterProxy pop: 3.
^interpreterProxy pushInteger: result.!
Item was changed:
----- Method: B3DAcceleratorPlugin>>primitiveTextureGetColorMasks (in category 'primitives-textures') -----
primitiveTextureGetColorMasks
| handle masks array renderer |
<export: true>
<var: #masks declareC:'unsigned int masks[4]'>
interpreterProxy methodArgumentCount = 3
ifFalse:[^interpreterProxy primitiveFail].
array := interpreterProxy stackObjectValue: 0.
handle := interpreterProxy stackIntegerValue: 1.
renderer := interpreterProxy stackIntegerValue: 2.
interpreterProxy failed ifTrue:[^nil].
((interpreterProxy isArray: array)
and: [(interpreterProxy slotSizeOf: array) = 4
+ and: [self b3dxTextureColorMasks: renderer _: handle _: masks]])
- and: [self cCode:'b3dxTextureColorMasks(renderer, handle, masks)' inSmalltalk:[false]]])
ifFalse:[^interpreterProxy primitiveFail].
interpreterProxy pushRemappableOop: array.
0 to: 3 do: [:i|
interpreterProxy
storePointer: i
ofObject: interpreterProxy topRemappableOop
withValue: (interpreterProxy positive32BitIntegerFor: (masks at: i))].
interpreterProxy popRemappableOop.
^interpreterProxy pop: 3 "pop args return receiver"!
Item was changed:
----- Method: B3DAcceleratorPlugin>>primitiveTextureSurfaceHandle (in category 'primitives-textures') -----
primitiveTextureSurfaceHandle
| handle result renderer |
<export: true>
interpreterProxy methodArgumentCount = 2
ifFalse:[^interpreterProxy primitiveFail].
handle := interpreterProxy stackIntegerValue: 0.
renderer := interpreterProxy stackIntegerValue: 1.
interpreterProxy failed ifTrue:[^nil].
+ result := self b3dxTextureSurfaceHandle: renderer _: handle.
- result := self cCode:'b3dxTextureSurfaceHandle(renderer, handle)' inSmalltalk:[-1].
result < 0 ifTrue:[^interpreterProxy primitiveFail].
interpreterProxy pop: 3.
^interpreterProxy pushInteger: result!
Item was changed:
----- Method: B3DAcceleratorPlugin>>primitiveTextureUpload (in category 'primitives-textures') -----
primitiveTextureUpload
| h w d result form bits ppw bitsPtr handle renderer |
<export: true>
<var: #bitsPtr type: 'void*'>
interpreterProxy methodArgumentCount = 3
ifFalse:[^interpreterProxy primitiveFail].
form := interpreterProxy stackValue: 0.
((interpreterProxy isPointers: form) and:[(interpreterProxy slotSizeOf: form) >= 4])
ifFalse:[^interpreterProxy primitiveFail].
bits := interpreterProxy fetchPointer: 0 ofObject: form.
w := interpreterProxy fetchInteger: 1 ofObject: form.
h := interpreterProxy fetchInteger: 2 ofObject: form.
d := interpreterProxy fetchInteger: 3 ofObject: form.
ppw := 32 // d.
(interpreterProxy isWords: bits)
ifFalse:[^interpreterProxy primitiveFail].
(interpreterProxy slotSizeOf: bits) = (w + ppw - 1 // ppw * h)
ifFalse:[^interpreterProxy primitiveFail].
bitsPtr := interpreterProxy firstIndexableField: bits.
handle := interpreterProxy stackIntegerValue: 1.
renderer := interpreterProxy stackIntegerValue: 2.
interpreterProxy failed ifTrue:[^nil].
+ result := self b3dxUploadTexture: renderer _: handle _: w _: h _: d _: bitsPtr.
- result := self cCode:'b3dxUploadTexture(renderer, handle, w, h, d, bitsPtr)' inSmalltalk:[false].
result ifFalse:[^interpreterProxy primitiveFail].
^interpreterProxy pop: 3. "args; return rcvr"!
Item was changed:
----- Method: B3DAcceleratorPlugin>>stackLightArrayValue: (in category 'primitive support') -----
stackLightArrayValue: stackIndex
"Load an Array of B3DPrimitiveLights from the given stack index"
| oop array arraySize |
<inline: false>
+ array := interpreterProxy stackValue: stackIndex.
- array := interpreterProxy stackObjectValue: stackIndex.
- array = nil ifTrue:[^nil]. "really??"
array = interpreterProxy nilObject ifTrue:[^nil].
+ (interpreterProxy isArray: array) ifFalse:
+ [^interpreterProxy primitiveFail].
- (interpreterProxy isArray: array)
- ifFalse:[^interpreterProxy primitiveFail].
arraySize := interpreterProxy slotSizeOf: array.
0 to: arraySize-1 do:[:i|
oop := interpreterProxy fetchPointer: i ofObject: array.
((interpreterProxy isWords: oop) and:[(interpreterProxy slotSizeOf: oop) = 32])
ifFalse:[^interpreterProxy primitiveFail].
].
^array!
Item was changed:
----- Method: FilePlugin>>primitiveDirectoryDelimitor (in category 'directory primitives') -----
primitiveDirectoryDelimitor
<export: true>
interpreterProxy minorVersion >= 13
ifTrue:
[interpreterProxy
pop: 1
thenPush: (interpreterProxy characterObjectOf: self dir_Delimitor)]
ifFalse:
[| ascii |
+ ascii := self dir_Delimitor.
- ascii := self asciiDirectoryDelimiter.
(ascii >= 0 and: [ascii <= 255])
ifTrue:
[interpreterProxy
pop: 1
thenPush: (interpreterProxy
fetchPointer: ascii
ofObject: interpreterProxy characterTable)]
ifFalse:
[interpreterProxy primitiveFail]]!
More information about the Vm-dev
mailing list