class Gosu::Texture

Public Class Methods

new(size, gl) click to toggle source
# File lib/gosu_android/graphics/texture.rb, line 8
    def initialize(size, gl)
      @size = size
      @allocator = BlockAllocator.new(@size, @size)
      @num = 0
      @gl = gl
      @name = [0].to_java(:int)
      @gl.glGenTextures(1, @name, 0)
      if @name[0] == -1
        raise "Couldn't create OpenGL texture"
      end
      @gl.glBindTexture(JavaImports::GL10::GL_TEXTURE_2D, @name[0])

      @gl.glTexImage2D(JavaImports::GL10::GL_TEXTURE_2D, 0, JavaImports::GL10::GL_RGBA, @allocator.width,
        @allocator.height, 0, JavaImports::GL10::GL_RGBA, JavaImports::GL10::GL_UNSIGNED_BYTE, nil)
=begin
      #TODO Should create an empty texture to be filled later
      pixel = [0]
      pbb = JavaImports::ByteBuffer.allocateDirect(pixel.length*4)
      pbb.order(JavaImports::ByteOrder.nativeOrder)
      pixel_buffer = pbb.asIntBuffer
      pixel_buffer.put(pixel.to_java(:int))
      pixel_buffer.position(0)
      JavaImports::GLUtils.texImage2D(JavaImports::GL10::GL_TEXTURE_2D, 0, 4, @allocator.width, @allocator.height, 0,
                 JavaImports::GL10::GL_RGBA, JavaImports::GL10::GL_UNSIGNED_BYTE, pixel_buffer)

      @gl.glTexImage2D(JavaImports::GL10::GL_TEXTURE_2D, 0, 4, @allocator.width, @allocator.height, 0,
                 JavaImports::GL10::GL_RGBA, JavaImports::GL10::GL_UNSIGNED_BYTE, pixel_buffer)

      @gl.glTexParameterf(JavaImports::GL10::GL_TEXTURE_2D,
        JavaImports::GL10::GL_TEXTURE_MIN_FILTER, JavaImports::GL10::GL_LINEAR)
      @gl.glTexParameteri(JavaImports::GL10::GL_TEXTURE_2D,
        JavaImports::GL10::GL_TEXTURE_WRAP_S, JavaImports::GL10::GL_CLAMP_TO_EDGE)
      @gl.glTexParameteri(JavaImports::GL10::GL_TEXTURE_2D,
        JavaImports::GL10::GL_TEXTURE_WRAP_T, JavaImports::GL10::GL_CLAMP_TO_EDGE)
=end
      @gl.glTexParameterf(JavaImports::GL10::GL_TEXTURE_2D, JavaImports::GL10::GL_TEXTURE_MIN_FILTER, JavaImports::GL10::GL_NEAREST)
      @gl.glTexParameterf(JavaImports::GL10::GL_TEXTURE_2D, JavaImports::GL10::GL_TEXTURE_MAG_FILTER, JavaImports::GL10::GL_LINEAR)
    end

Public Instance Methods

finalize() click to toggle source
# File lib/gosu_android/graphics/texture.rb, line 47
def finalize
  tbb = (JavaImports::ByteBuffer.allocateDirect(4))
  tbb.order(JavaImports::ByteOrder.nativeOrder)
  texture_buffer = tbb.asIntBuffer
  texture_buffer.put(@name)
  texture_buffer.position(0)      
  @gl.glDeleteTextures(1, texture_buffer)
end
free(x, y) click to toggle source
# File lib/gosu_android/graphics/texture.rb, line 82
def free(x, y)
  @allocator.free(x, y)
  @num -= 1
end
size() click to toggle source
# File lib/gosu_android/graphics/texture.rb, line 60
def size
  @allocator.width
end
tex_name() click to toggle source
# File lib/gosu_android/graphics/texture.rb, line 56
def tex_name
  @name[0]
end
try_alloc(graphics, queues, ptr, bmp, padding) click to toggle source
# File lib/gosu_android/graphics/texture.rb, line 64
def try_alloc(graphics, queues, ptr, bmp, padding)
  alloc_info = @allocator.alloc(bmp.width, bmp.height)
  if (not alloc_info[0])
      return nil
  end
  block = alloc_info[1]
  result = TexChunk.new(graphics, queues, ptr, block.left + padding, block.top + padding,
                            block.width - 2 * padding, block.height - 2 * padding, padding)

  @gl.glTexSubImage2D(JavaImports::GL10::GL_TEXTURE_2D, 0, block.left, block.top, block.width, block.height,
    Color::GL_FORMAT, JavaImports::GL10::GL_UNSIGNED_BYTE, bmp.data_java)
  #@gl.glBindTexture(JavaImports::GL10::GL_TEXTURE_2D, @name[0])
  #JavaImports::GLUtils.texImage2D(JavaImports::GL10::GL_TEXTURE_2D, 0, bmp.to_open_gl, 0)

  @num += 1
  result
end