glClearColor отображает только черный экран - PullRequest
4 голосов
/ 28 сентября 2019

Мне трудно понять, почему окно, которое я делаю с openGL, остается черным.

Я не вижу, где я допустил ошибку в своем коде:

import com.jogamp.opengl.awt.GLCanvas
import com.jogamp.opengl.{GL, GLAutoDrawable, GLCapabilities, GLEventListener, GLProfile}
import javax.swing.{JFrame, WindowConstants}

class Game extends JFrame ("Just a window OMG.") with GLEventListener  {

  val profile: GLProfile = GLProfile.get(GLProfile.GL4)
  val capabilities = new GLCapabilities(profile)
  val canvas = new GLCanvas(capabilities)

  this.setName("Just a window OMG.")
  this.getContentPane.add(canvas)
  this.setSize(800, 600)
  this.setLocationRelativeTo(null)
  this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE)
  this.setVisible(true)
  this.setResizable(false)
  canvas.requestFocusInWindow

  def play(): Unit = {

  }

  override def display(drawable: GLAutoDrawable): Unit = {
    val gl = drawable.getGL.getGL4
    gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT)

    gl.glFlush()
  }

  override def dispose(drawable: GLAutoDrawable): Unit = {}

  override def init(drawable: GLAutoDrawable): Unit = {
    val gl = drawable.getGL.getGL4
    gl.glClearColor(1f, 0f, 0f, 1.0f)
  }

  override def reshape(drawable: GLAutoDrawable, x: Int, y: Int, width: Int, height: Int): Unit = {}
}

object Main {
  def main(args: Array[String]): Unit = {
    val game = new Game()
    game.play()
  }
}

Я такжепопытался поместить glClear в метод отображения, а также вставил glClearColor в метод init.

РЕДАКТИРОВАТЬ: я нашел его.На самом деле дисплей и init мет никогда не вызывались.Слушатель не был прикреплен к холсту, а затем никогда не получал никакого события.

Проблема в том, что я пропустил строку

canvas.addGLEventListener(this)

сразу после инициализации холста.(эта строка)

val canvas = new GLCanvas(capabilities)

1 Ответ

3 голосов
/ 28 сентября 2019

(я отвечаю на свой вопрос)

Так что на самом деле проблема заключалась в том, что метод display и init никогда не вызывался.Насколько я понял, GLEventListener ожидает события, и они будут вызывать вызов метода init и display.

"вещь", которая заметит GLEventListener, - это холст, но мой холст иGLEventListener не был связан.

Для этого я добавил строку

canvas.addGLEventListener(this)

Сразу после того, как я инициализировал холст, он смог заметить вызов метода init и display.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...