[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