All Downloads are FREE. Search and download functionalities are using the official Maven repository.

cwinter.codecraft.graphics.engine.JVMRenderStack.scala Maven / Gradle / Ivy

package cwinter.codecraft.graphics.engine

import com.jogamp.opengl.GL._
import com.jogamp.opengl.GL4

import cwinter.codecraft.graphics.materials._
import cwinter.codecraft.util.maths.matrices.IdentityMatrix4x4
import cwinter.codecraft.util.maths.VertexXY


private[graphics] case class JVMRenderStack(implicit gl: GL4, fbo: FramebufferObject)
    extends RenderStack {
  import gl._

  // materials
  val SimpleMaterial = new SimpleMaterial
  val MaterialXYZRGB = new MaterialXYZRGB
  val BloomShader = new BloomShader
  val GaussianGlow = new GaussianGlow
  val GaussianGlowPIntensity = new GaussianGlowPIntensity
  val TranslucentAdditive = new TranslucentAdditive
  val TranslucentProportional = new TranslucentProportional
  val TranslucentAdditivePIntensity = new TranslucentAdditivePIntensity


  // texture to screen rendering code
  val RenderToScreen: RenderToScreen = new RenderToScreen
  val quad = RenderToScreen.createVBO(
    Array(
      (VertexXY(1.0f, 1.0f), VertexXY(1.0f, 1.0f)),
      (VertexXY(-1.0f, -1.0f), VertexXY(0.0f, 0.0f)),
      (VertexXY(1.0f, -1.0f), VertexXY(1.0f, 0.0f)),

      (VertexXY(1.0f, 1.0f), VertexXY(1.0f, 1.0f)),
      (VertexXY(-1.0f, 1.0f), VertexXY(0.0f, 1.0f)),
      (VertexXY(-1.0f, -1.0f), VertexXY(0.0f, 0.0f))
    )
  )


  override def postDraw(camera: Camera2D): Unit = {
    // draw texture to screen
    glViewport(0, 0, camera.screenWidth, camera.screenHeight)
    glBindFramebuffer(GL_FRAMEBUFFER, 0)
    glClearColor(1.0f, 1.0f, 1.0f, 1.0f)
    glClear(GL_COLOR_BUFFER_BIT)

    RenderToScreen.beforeDraw(camera.projection)

    glDisable(GL_DEPTH_TEST)
    glBindTexture(GL_TEXTURE_2D, fbo.texture0)

    RenderToScreen.draw(quad, IdentityMatrix4x4)

    RenderToScreen.afterDraw()
    glBindTexture(GL_TEXTURE_2D, 0)
  }


  override def dispose(): Unit = materials.foreach(_.dispose())
}





© 2015 - 2025 Weber Informatics LLC | Privacy Policy