Advertisement
Guest User

Floating point texture to OpenGL

a guest
Jul 11th, 2014
280
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scala 2.09 KB | None | 0 0
  1. class DataGL(val data: Array[Float],
  2.              val width: Int,
  3.              val height: Int,
  4.              val dimensions: Int,
  5.              val texUnit: Int) extends RenderGL {
  6.  
  7.   val id = _createTexture()
  8.  
  9.   def _format() = dimensions match {
  10.     case 1 => (GL30.GL_R32F, GL11.GL_R)
  11.     case 2 => (GL30.GL_RG32F, GL30.GL_RG)
  12.     case 3 => (GL30.GL_RGB32F, GL11.GL_RGB)
  13.     case 4 => (GL30.GL_RGBA32F, GL11.GL_RGBA)
  14.     case _ => throw new RuntimeException("Illegal texture dimension of " + dimensions)
  15.   }
  16.  
  17.   def _createTexture() = {
  18.     GL13.glActiveTexture(GL13.GL_TEXTURE0 + texUnit)
  19.  
  20.     val tid = GL11.glGenTextures()
  21.     GL11.glBindTexture(GL11.GL_TEXTURE_2D, tid)
  22.  
  23.     GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_NEAREST)
  24.     GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_NEAREST)
  25.     GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_S, GL13.GL_CLAMP_TO_BORDER)
  26.     GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T, GL13.GL_CLAMP_TO_BORDER)
  27.  
  28.     val bdata = BufferUtils.createFloatBuffer(data.length)
  29.     bdata.put(data)
  30.     bdata.flip()
  31.  
  32.     val format = _format()
  33.     val precisionFormat: Int = format._1
  34.     val components: Int = format._2
  35.     GL11.glTexImage2D(GL11.GL_TEXTURE_2D, 0, precisionFormat, width, height, 0, components, GL11.GL_FLOAT, bdata)
  36.  
  37.     GL11.glBindTexture(GL11.GL_TEXTURE_2D, 0)
  38.     GL13.glActiveTexture(GL13.GL_TEXTURE0)
  39.     assert(GL11.glGetError() == GL11.GL_NO_ERROR)
  40.  
  41.     tid
  42.   }
  43.  
  44.  
  45.   override def draw(): Unit = {
  46.     GL13.glActiveTexture(GL13.GL_TEXTURE0 + texUnit)
  47.     GL11.glBindTexture(GL11.GL_TEXTURE_2D, id)
  48.     GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_NEAREST)
  49.     GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_NEAREST)
  50.     GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_S, GL13.GL_CLAMP_TO_BORDER)
  51.     GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T, GL13.GL_CLAMP_TO_BORDER)
  52.   }
  53.  
  54.   override def dispose(): Unit = GL11.glDeleteTextures(id)
  55.  
  56. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement