TForm


Croquet-Teapot

Comment:

Main comment stating the purpose of this class and relevant relationship to other classes.

Possible useful expressions for doIt or printIt.

Structure:
 instVar1		type -- comment about the purpose of instVar1
 instVar2		type -- comment about the purpose of instVar2

Any further useful comments about the general approach of this implementation.

Hierarchy:

ProtoObject
Object
TObject
TLeaf
TForm

Summary:

instance variables:

bMipmap bShrinkFit extension extent fileName form glID locator memUsed thumb updateRect

class variables:

DefaultForm

Pool:

GLExtConstants OpenGLConstants

methods:

instance class
accessing import/export initialize render instance creation

Detail:

instance variables:

bMipmap
bShrinkFit
extension
extent
fileName
form
glID
locator
memUsed
thumb
updateRect

class variables:

DefaultForm

instance methods:

accessing
bMipmap


	^ bMipmap.
extension


	^ extension.
extent


	^ extent.
fileName


	^ fileName.
form


	^form.
isLoaded

	locator ifNil:[^true].
	^fileName notNil
isStatic: bool


	self isStatic = bool ifTrue:[^ self].
	isStatic _ bool.
magFilter

	^GLLinear
minFilter

	^bMipmap ifTrue:[GLLinearMipmapLinear] ifFalse:[GLLinear]
printOn: aStream

	fileName ifNil:[aStream nextPutAll: 'TForm[Dynamic Texture]'] 
	ifNotNil:
		[aStream nextPutAll: 'TForm[', self fileName, ']'.].
	aStream nextPutAll:'<', self croquetUID asString,'>'.
resetUpdateRect


	updateRect _ nil.
scaleTexture: oldForm to: scaledSize

	| mmForm |
	oldForm extent = scaledSize ifTrue:[^oldForm].
	mmForm := Form extent: scaledSize depth: 32.
	(WarpBlt current toForm: mmForm)
		sourceForm: form destRect: mmForm boundingBox;
		combinationRule: 3;
		cellSize: 2;
		warpBits.
	^mmForm
shrinkFit


^ bShrinkFit.
shrinkFit: bSF


bShrinkFit _ bSF.
trueExtent


	^ form extent.
updateAll


	self updateRect: form boundingBox.
updateArea: aRectangle with: aForm

	"the form contains new data to copy into the rectangle area specified"
	| fixBlt |
	fixBlt := BitBlt toForm: aForm.
	fixBlt combinationRule: 40 "fixAlpha:with:".
	fixBlt halftoneForm: (Bitmap with: 16rFF000000).
	fixBlt destRect: fixBlt clipRect; copyBits.

	form copy: aRectangle from: 0@0 in: aForm rule: Form over.
	self updateRect: aRectangle.
	
updateRect


	^ updateRect.
updateRect: ur


	updateRect _ updateRect ifNil:[ur] ifNotNil:[updateRect quickMerge: ur].
upload: ogl dirtyRect: aRectangle

	"TODO: Later only upload the dirty portion"
	| level scaledSize dirtyRect autoMip internalFormat mipform|
	autoMip := bMipmap and:[ogl autoMipmap].
	form unhibernate.
	dirtyRect := aRectangle.
	isStatic ifTrue:[
		"Static (possibly compressed) textures typically require complete uploads;
		as they don't change often just upload everything."
		dirtyRect := 0@0 extent: form extent.
	].
	dirtyRect := dirtyRect intersect: form boundingBox.
	ogl glBindTexture: GLTexture2d with: glID.
	ogl glTexParameteri: GLTexture2d with: GLTextureMinFilter with: self minFilter.
	ogl glTexParameteri: GLTexture2d with: GLTextureMagFilter with: self magFilter.
	autoMip ifTrue:[ogl glTexParameteri: GLTexture2d with: GLGenerateMipmapSGIS with: true].

	"TODO: This would be the right place to figure out what the initial size of the texture should be given that we're already low on texture memory."
	scaledSize := form extent.

	"specific optimization for morphic textures"
	(dirtyRect extent ~= form extent "needed since first-time upload *must* use glTexImage2D"
		and:[form depth = 32 "needed since we only upload 32bpp forms"
		and:[scaledSize = form extent "needed since we don't scale here"
		and:[autoMip or:[bMipmap not "only allow for non-mipmaps"]]]]) ifTrue:[
			ogl glPixelStorei: GLUnpackRowLength with: form width.
			ogl glPixelStorei: GLUnpackSkipRows with: dirtyRect top.
			ogl glPixelStorei: GLUnpackSkipPixels with: dirtyRect left.
			ogl glTexSubImage2D: GLTexture2d with: 0 
				with: dirtyRect left with: dirtyRect top 
				with: dirtyRect width with: dirtyRect height 
				with: ogl texturePixelFormat with: ogl texturePixelType 
				with: form bits.
			ogl glPixelStorei: GLUnpackRowLength with: 0.
			ogl glPixelStorei: GLUnpackSkipRows with: 0.
			ogl glPixelStorei: GLUnpackSkipPixels with: 0.
			^self].

	level _ 0.
	"figure out the internal format to use"
	internalFormat := ogl textureInternalFormat.
	isStatic ifTrue:[
		(ogl hasExtension: #'GL_ARB_texture_compression') ifTrue:[
			"internalFormat := ogl textureInternalFormatCompressed."
		].
	].

	mipform _ form.
	[
		mipform := self scaleTexture: mipform to: scaledSize.
		ogl glTexImage2D: GLTexture2d 
			with: level with: internalFormat 
			with: mipform width with: mipform height 
			with: 0 
			with: ogl texturePixelFormat 
			with: ogl texturePixelType 
			with: mipform bits.
	autoMip not 
		and:[bMipmap 
		and:[scaledSize x > 1 or:[scaledSize y > 1]]]] whileTrue:[
			scaledSize := (scaledSize // 2) max: (1@1).
			level := level + 1.
	].


import/export
doneLoading: aLocator

	| myForm |
	myForm := 	[Form fromFileNamed: aLocator localFileName] on: Error do:[:ex| CroquetData logError: ex. ex return: nil].
	myForm ifNil:[^self].
	(myForm asFormOfDepth: 32) displayScaledOn: form.
	extension = #colorKey ifTrue:[ form colorKeyAlpha.].
	self updateRect: form boundingBox.
	fileName := aLocator localFileName.
postImportFrom: importer

	super postImportFrom: importer.
	^Croquet world renderer textureAt: locator ifAbsentPut:[
		glID _ nil.
		importer ifNotNil:[
			locator ifNotNil:[
				importer download: locator whenFinishedSend: #doneLoading: to: self.
				form fillWhite.
			].
		].
		self updateRect: form boundingBox.
		self.].
prepareToExportOn: exporter

	super prepareToExportOn: exporter.
	exporter ifNil:[^self].
	locator := exporter addFileResource: fileName locator: locator.
	locator ifNotNil:[
		fileName := nil.
		form := Form extent: form extent depth: form nativeDepth bits: nil.
	].

initialize
calcMemUsed


	memUsed _ form extent area*4.
	bMipmap ifTrue:[memUsed _ memUsed + (memUsed//3)].
createPrimitive: ogl


	| holder |
	holder := WordArray new: 1.
	ogl glGenTextures: 1 with: holder.
	glID _ (holder at: 1).
	updateRect _ form boundingBox.
	^ true.
delete


	self destroyPrimitive: Croquet world ogl.
destroy: ogl


	self destroyPrimitive: ogl.
destroyPrimitive: ogl

	ogl ifNil:[ glID _ nil. ^ self]. "Nothing to destroy"
	glID ifNotNil:[
		ogl glDeleteTextures: 1 with: (WordArray with: glID).
		glID _ nil.].
initialize: fName form: baseForm mipmap: bMM shrinkFit: bSF extension: ext


	bMipmap _ bMM.
	bShrinkFit _ bSF.
	fileName _ fName.
	isStatic _ fName isNil.
	extension _ ext.
	self setupForm: baseForm.
setupForm: baseForm

	| aForm size tsize |
	aForm _ baseForm.
	extent _ baseForm extent. "before we scale it down"
	aForm depth = 32 ifFalse: [aForm _ aForm asFormOfDepth: 32.].
	size _ aForm width @ aForm height.
	bShrinkFit
		ifTrue:[size := size asSmallerPowerOfTwo]
		ifFalse: [size := size asLargerPowerOfTwo].
	size = aForm extent ifTrue:[form _ aForm]
		ifFalse:[	form := Form extent: size depth: 32.
				aForm displayScaledOn: form].
tsize_ (size*32/size max) asLargerPowerOfTwo.
thumb _ Form extent:tsize depth:32.
aForm displayScaledOn:thumb.
	extension = #colorKeyZero ifTrue:[form colorKeyZero. ^self].
	extension = #colorKey ifTrue:[form colorKeyAlpha. ^self].
	form fixAlpha.
	self updateAll.
	self calcMemUsed.

render
bind: ogl


	ogl changeTexture ifFalse:[^false]. "this is to allow global texturing, we ignore this texture"
	timeStamp _ ogl timeStamp.
	glID ifNil:[  self createPrimitive: ogl.].
	ogl openDisplayList ifNotNil:[ ogl openDisplayList addChild: self].
	ogl glBindTexture: GLTexture2d with: glID.
	updateRect ifNotNil:[
		self upload: ogl dirtyRect: updateRect. 
		updateRect _ nil.
		].
	^ true.

class methods:

instance creation
defaultForm


	^DefaultForm ifNotNil:[DefaultForm] ifNil:[DefaultForm _ Form extent: 64@64 depth: 32 bits: (Base64MimeConverter mimeDecode:
   '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
Iv8SERD/ERERDv8AAAEH/wEBAAr/AQABCv8BAAAP/wEBAP8AAAH/AQAADv8AAAEb/1UAAP+H
AAD/ugAA/wAAAf8BAAD/IgAACv8AAAEL/wAAEf+qAAAK/6oAARP/qwAC/7oAAP+rAAH/qwAC
Cv+qAAEL/6oAAP9UAAAK/xEREhP/ERER/xEQEf9VAAD/qQABDv+7AAAK/6sBAQr/uwAAE/+r
AQD/qgAA/4gAAP8QEhEK/wAAAR//EBIS/wAAEv8SEBL/ERIS/wAAI/8AAAH/EREQDv8AAAEH
/wEAAQr/AAABB/8BAAAO/wAAATf/IQAA/wAAAf8BAAD/AQAB/wEAAP8AAAH/AQAA/xAAAP9V
AAD/qgAB/7sAAf8iAQH/AQAAEv8AAAE7/5gAAP+rAAH/qgAA/6oAAf+qAAD/qQAA/6oAAf+7
AAD/qwEB/6oAAf+IAAD/EQAA/xESEv8RERIK/xEREQf/lwAACv+qAAEv/7sAAP+rAAD/qwAB
/6oAAP+YAAD/qgAB/6sBAf+YAAD/IgAA/wAAAf8BAAAK/wAAARf/AQEB/zMAAf8hAAD/AQAA
/xEAABb/AAABE/8BAAH/AAAB/wAQAf8RAAEK/wAAAQf/EQAAFv8AAAEK/4gAACP/qgAB/7sA
AP94AAD/EQAA/wEAAP8BABD/AAEB/wAAAQ7/qgAAg/+rAQH/mQEA/7wBAf+qAAH/mQAA/6oA
AP+rAAH/qQAC/0UAAf8iAAD/EBER/xEREv8iAAD/VAAA/6oAAv+rAAD/ugEA/6oAAP+qAAH/
mQAA/6sAAf+8AAD/uwAA/7sBAf9mADT/IwAB/wAAAf8RAAD/AAAB/wABAP93AAD/qgAACv+7
AAAj/4kAAP9WAAH/VQAA/yIAAf8RAAD/AQAB/wAAAf8AABIW/wAAAQr/AAEAN/8AAAH/AQAB
/wEAAP8AARH/AREA/yEAAP9EAAD/ASIA/wAAAf8iIiH/AAAB/wABAP+ZAAAK/6oAASv/qwAB
/6oBAf+rAAH/qgAA/6sAAf+rAQD/qgEA/6sAAf+HAAD/ERAQCv8AAAEK/yIAADv/iQAA/7sA
AP+rAAH/qwAA/6oAAP+qAQH/uwEC/6kAAP+qAAH/uwAA/3cAAP93AQD/ERER/wEAAAr/AAAB
P/8AEQD/VgAA/7sAAP+8AAD/qgAC/6oAAP+8AAD/uwAA/4gAAP9VAQD/VAAA/yEAAP8AAAH/
AQAA/wAAAQr/AQABM/8AAAH/ERER/yIjIf8QERH/AAAB/yIhIv8AACL/EBES/xEREP8RERH/
AQAB/yEhIgr/AAABF/8zAAD/iAAA/6sAAf+qAQD/ugAACv+qAAEX/7sBAP+rAAH/qQAA/6sA
AP+HAAAO/wAAARP/IgAA/yMAAP9EAAH/vAABCv+qAAEr/6oBAf+qAAD/uwAB/6wAAf+ZAAD/
qwAC/6kAAP+rAAH/IgAA/xEAAA7/AAABE/8hAAD/uwAA/7wAAf+pAAAK/6oAACP/uwAB/6kA
AP+qAQH/qgAA/3YAAP9VAAD/AAAB/wEAAAr/AAABB/8RERAK/xERERf/EREQ/xIREf8BAAD/
AAEA/xEREQr/AAABC/8CAAD/AAARCv8AAAE3/yIAAP9EAAD/RQAB/7sAAP+8AAH/qwEB/6oB
Af+8AAH/mAAA/6kAAP+qAAD/hwAA/wABAAr/AAABF/8iAAD/ERER/yIAAP+qAAH/vAAADv+q
AAAz/6sAAf+qAAD/qgAB/6oAAv+qAAD/qgEA/3cAAP8hAAD/AQEB/wABAf8AAAH/IgAACv+I
AAAf/6oAAf+qAQD/qgAB/6oAAP+7AAH/qwAC/6oAAAr/mQAAEv8AAAET/zMAM/8iIiH/IiIi
/yEAAAr/ERARZ/8iIiL/IyIi/xEREv8jISP/EBER/wAiAP8RERH/EhES/xESEP8iIiL/EhES
/xEREv8zAAH/VQAB/1UAAP93AAH/mAAy/7sAAf+7AAD/qwAA/1UAAP8SERH/ERER/xEREP8R
EREK/1UAAHf/qwAB/5kAAP+7AQH/mgA0/5kAAP+qAAD/qgAB/7wAAP+6AQD/qQAA/6sAAf9l
AAD/EhER/xIREP8iIiL/MwAA/yIiIv9UAAD/qgAB/7sAAP+6AAD/uwEB/5gzAP+qAQL/qgAA
/5kAAP+8AAD/EREP/xIREQr/ERERF/8AAAH/AQAA/wAAAf8jAAH/EAAACv8BAAAO/wAAAQr/
AQAAD/8AAAH/AQEA/wEAASb/AAABD/8AABH/hwAA/1UAAAr/ABEBDv8AAAEn/wEAAP+qAAH/
qgAA/6kAAP+aAAD/vAAA/7sAAP+7AAH/vAAACv+ZAAAL/6kAAP+IAAEO/wAAAQf/AQAACv8A
AAE3/1QAAP+qAAH/qgAA/6oBAf+qAAH/qgAA/6sAAP+rAAH/qwAA/xAAAf8SAQD/EhAR/xER
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' as: String) asByteArray].
defaultTForm


	| tform |
	tform _ Croquet world renderer textureAt: 'default' ifAbsentPut:[
		TForm fromForm: TForm defaultForm mipmap: true shrinkFit: true extension: nil.].
	^ tform.
fromFileNamed: fName mipmap: bMM shrinkFit: bSF extension: ext


	| file form tform |
	file _ CroquetData findTextureFileName: fName.
	file ifNil:[ 
		Transcript show: 'DEFAULT TEXTURE...Check file names!';cr.
		tform _ Croquet world renderer textureAt: 'default' ifAbsentPut:[
			form _ TForm defaultForm.
			tform _ TForm fromForm: form mipmap: bMM shrinkFit: bSF extension: ext.
			].
		^ tform.
		].
	^Croquet world renderer textureAt: file ifAbsentPut:[
		form _ Form fromFileNamed: file.
		form ifNotNil:[
			tform_ TForm new initialize: file form: form mipmap: bMM shrinkFit: bSF extension: ext.
			] ifNil:[
				Transcript show: 'DEFAULT TEXTURE...Check file names!';cr.
				tform _ Croquet world renderer textureAt: 'default' ifAbsentPut:[
					form _ TForm defaultForm.
					tform _ TForm fromForm: form mipmap: bMM shrinkFit: bSF extension: ext.
				].
			].
		tform.
		].
fromForm: baseForm mipmap: bMM shrinkFit: bSF extension: ext


	^ self new initialize: nil form: baseForm mipmap: bMM shrinkFit: bSF extension: ext.
	

^top


- made by Dandelion -