Texture loaded from the assets folder

Introduced properties

fun path: String

gamnit :: TextureAsset :: path

Path to this texture within the assets folder
protected fun path=(path: String)

gamnit :: TextureAsset :: path=

Path to this texture within the assets folder

Redefined properties

redef type SELF: TextureAsset

gamnit $ TextureAsset :: SELF

Type of this instance, automatically specialized in every class
redef fun load(force: nullable Bool)

gamnit $ TextureAsset :: load

Load this texture, force reloading it if force
redef fun to_s: String

gamnit $ TextureAsset :: to_s

User readable representation of self.

All properties

fun !=(other: nullable Object): Bool

core :: Object :: !=

Have self and other different values?
fun ==(other: nullable Object): Bool

core :: Object :: ==

Have self and other the same value?
type CLASS: Class[SELF]

core :: Object :: CLASS

The type of the class of self.
type SELF: Object

core :: Object :: SELF

Type of this instance, automatically specialized in every class
protected fun class_factory(name: String): CLASS

core :: Object :: class_factory

Implementation used by get_class to create the specific class.
fun class_name: String

core :: Object :: class_name

The class name of the object.
fun delete

gamnit :: RootTexture :: delete

Delete this texture and free all its resources
fun deleted: Bool

gamnit :: RootTexture :: deleted

Has this resource been deleted?
protected fun deleted=(deleted: Bool)

gamnit :: RootTexture :: deleted=

Has this resource been deleted?
fun error: nullable Error

gamnit :: Texture :: error

Last error on this texture
protected fun error=(error: nullable Error)

gamnit :: Texture :: error=

Last error on this texture
fun get_class: CLASS

core :: Object :: get_class

The meta-object representing the dynamic type of self.
fun gl_texture: Int

gamnit :: Texture :: gl_texture

OpenGL handle to this texture
protected fun gl_texture=(gl_texture: Int)

gamnit :: RootTexture :: gl_texture=

fun hash: Int

core :: Object :: hash

The hash code of the object.
fun height: Float

gamnit :: Texture :: height

Height in pixels of this texture
protected fun height=(height: Float)

gamnit :: Texture :: height=

Height in pixels of this texture
init init

core :: Object :: init

fun inspect: String

core :: Object :: inspect

Developer readable representation of self.
protected fun inspect_head: String

core :: Object :: inspect_head

Return "CLASSNAME:#OBJECTID".
intern fun is_same_instance(other: nullable Object): Bool

core :: Object :: is_same_instance

Return true if self and other are the same instance (i.e. same identity).
fun is_same_serialized(other: nullable Object): Bool

core :: Object :: is_same_serialized

Is self the same as other in a serialization context?
intern fun is_same_type(other: Object): Bool

core :: Object :: is_same_type

Return true if self and other have the same dynamic type.
fun load(force: nullable Bool)

gamnit :: Texture :: load

Load this texture, force reloading it if force
fun loaded: Bool

gamnit :: RootTexture :: loaded

Has this texture been loaded yet?
protected fun loaded=(loaded: Bool)

gamnit :: RootTexture :: loaded=

Has this texture been loaded yet?
init new(path: Text): Texture

gamnit :: Texture :: new

Prepare a texture located at path within the assets folder
intern fun object_id: Int

core :: Object :: object_id

An internal hash code for the object based on its identity.
fun offset_bottom: Float

gamnit :: Texture :: offset_bottom

Offset of the bottom border on root from 0.0 to 1.0
fun offset_left: Float

gamnit :: Texture :: offset_left

Offset of the left border on root from 0.0 to 1.0
fun offset_right: Float

gamnit :: Texture :: offset_right

Offset of the right border on root from 0.0 to 1.0
fun offset_top: Float

gamnit :: Texture :: offset_top

Offset of the top border on root from 0.0 to 1.0
fun output

core :: Object :: output

Display self on stdout (debug only).
intern fun output_class_name

core :: Object :: output_class_name

Display class name on stdout (debug only).
fun path: String

gamnit :: TextureAsset :: path

Path to this texture within the assets folder
protected fun path=(path: String)

gamnit :: TextureAsset :: path=

Path to this texture within the assets folder
fun pixelated=(pixelated: Bool)

gamnit :: Texture :: pixelated=

Should this texture be drawn pixelated when magnified? otherwise it is interpolated
fun premultiply_alpha: Bool

gamnit :: RootTexture :: premultiply_alpha

Should the pixels RGB values be premultiplied by their alpha value at loading?
fun premultiply_alpha=(premultiply_alpha: Bool)

gamnit :: RootTexture :: premultiply_alpha=

Should the pixels RGB values be premultiplied by their alpha value at loading?
abstract fun root: RootTexture

gamnit :: Texture :: root

Root texture from which self is derived
fun serialization_hash: Int

core :: Object :: serialization_hash

Hash value use for serialization
fun subtexture(left: Numeric, top: Numeric, width: Numeric, height: Numeric): Subtexture

gamnit :: Texture :: subtexture

Prepare a subtexture from this texture, from the given pixel offsets
intern fun sys: Sys

core :: Object :: sys

Return the global sys object, the only instance of the Sys class.
fun to_animation(fps: Float, x: Int, y: Int): Animation

gamnit :: Texture :: to_animation

Convert to a sprite animation at fps speed with x or y frames
abstract fun to_jvalue(env: JniEnv): JValue

core :: Object :: to_jvalue

fun to_s: String

core :: Object :: to_s

User readable representation of self.
fun width: Float

gamnit :: Texture :: width

Width in pixels of this texture
protected fun width=(width: Float)

gamnit :: Texture :: width=

Width in pixels of this texture
package_diagram gamnit::TextureAsset TextureAsset gamnit::RootTexture RootTexture gamnit::TextureAsset->gamnit::RootTexture gamnit::Texture Texture gamnit::RootTexture->gamnit::Texture ...gamnit::Texture ... ...gamnit::Texture->gamnit::Texture

Ancestors

interface Object

core :: Object

The root of the class hierarchy.
abstract class Texture

gamnit :: Texture

Texture composed of pixels, loaded from the assets folder by default

Parents

class RootTexture

gamnit :: RootTexture

Texture with its own pixel data

Class definitions

gamnit $ TextureAsset
# Texture loaded from the assets folder
class TextureAsset
	super RootTexture

	# Path to this texture within the `assets` folder
	var path: String

	redef fun load(force)
	do
		if loaded and force != true then return

		load_from_platform

		# If no pixel data was loaded, load the pixel default texture
		if gl_texture == -1 then load_checker 32

		loaded = true
	end

	# Partially load this texture from platform-specific features
	#
	# This method should fill `width`, `height` and `pixels`.
	private fun load_from_platform is abstract

	redef fun to_s do return "<{class_name} path:{path}>"
end
lib/gamnit/textures.nit:311,1--336,3

gamnit :: display_linux $ TextureAsset
redef class TextureAsset

	redef fun load_from_platform
	do
		var path = "assets" / path

		var surface = new SDLSurface.load(path.to_cstring)
		if surface.address_is_null then
			error = new Error("Failed to load texture at '{path}'")
			return
		end

		self.width = surface.w.to_f
		self.height = surface.h.to_f
		var format = if surface.format.amask > 0u32 then gl_RGBA else gl_RGB
		var pixels = surface.pixels

		load_from_pixels(pixels, surface.w, surface.h, format)

		surface.free
	end
end
lib/gamnit/display_linux.nit:124,1--145,3

gamnit :: display_ios $ TextureAsset
redef class TextureAsset
	redef fun load_from_platform
	do
		var error = glGetError
		assert error == gl_NO_ERROR else print_error error

		# Find file
		var ns_path = ("assets"/path).to_nsstring
		var path_in_bundle = asset_path(ns_path)
		if path_in_bundle.address_is_null then
			self.error = new Error("Texture at '{path}' not found")
			return
		end

		# Load texture
		var glk_texture = glkit_load(path_in_bundle, premultiply_alpha)
		if glk_texture.address_is_null then
			self.error = new Error("Failed to load texture at '{self.path}'")
			return
		end

		gl_texture = glk_texture.name
		width = glk_texture.width.to_f
		height = glk_texture.height.to_f
		loaded = true

		error = glGetError
		assert error == gl_NO_ERROR
	end

	# Load image at `path` with GLKit services
	private fun glkit_load(path: NSString, premultiply: Bool): GLKTextureInfo
	in "ObjC" `{

		// The premultiplication flag has been inverted between iOS 9 and 10
		NSNumber *premultiply_opt;
		NSComparisonResult order = [[UIDevice currentDevice].systemVersion compare: @"10.0.0" options: NSNumericSearch];
		if (order == NSOrderedSame || order == NSOrderedDescending) {
			// >= 10
			premultiply_opt = premultiply? @NO: @YES;
		} else {
			// < 10
			premultiply_opt = premultiply? @YES: @NO;
		}

		NSDictionary *options = @{GLKTextureLoaderApplyPremultiplication: premultiply_opt};
		NSError *error;
		GLKTextureInfo *spriteTexture = [GLKTextureLoader textureWithContentsOfFile: path options: options error: &error];
		if (error != nil) NSLog(@"Failed to load texture: %@", [error localizedDescription]); // TODO return details to Nit

		return spriteTexture;
	`}
end
lib/gamnit/display_ios.nit:51,1--103,3

gamnit :: display_android $ TextureAsset
redef class TextureAsset

	private fun load_bitmap(asset_manager: AssetManager, path: String): NativeBitmap
	do
		return asset_manager.bitmap(path)
	end

	redef fun load_from_platform
	do
		jni_env.push_local_frame 4

		var asset_manager = app.asset_manager
		var bmp = load_bitmap(asset_manager, path)
		if bmp.is_java_null then
			error = new Error("Failed to load texture at '{path}'")
			jni_env.pop_local_frame
			return
		end

		var buf = bmp.copy_pixels(unmultiply=not premultiply_alpha)
		loaded = true
		width = bmp.width.to_f
		height = bmp.height.to_f
		var pixels = buf.native_array

		load_from_pixels(pixels, bmp.width, bmp.height, gl_RGBA)
		buf.destroy
		bmp.recycle

		jni_env.pop_local_frame
	end
end
lib/gamnit/display_android.nit:54,1--85,3

gamnit :: android19 $ TextureAsset
redef class TextureAsset

	redef fun load_bitmap(asset_manager, path)
	do
		var stream = asset_manager.native_assets_manager.open(path.to_java_string)
		return new NativeBitmap.from_stream_ex(stream, premultiply_alpha)
	end
end
lib/gamnit/android19.nit:33,1--40,3