我坚持glReadPixels:似乎没有数据写入输出数组。
从手册(https://www.opengl.org/sdk/docs/man/docbook4/xhtml/glReadPixels.xml)中写道,如果生成错误,则不会对数据内容进行任何更改。,但显然没有错误返回glGetError()。
我真的不明白出了什么问题......这是代码 - 在 golang 中 - 对屏幕中的随机点进行采样。它总是打印[0 0 0],尽管没有像素应该是黑色的(甚至不是背景)。
package main
import (
"fmt"
"github.com/go-gl/gl/v4.1-core/gl"
"github.com/veandco/go-sdl2/sdl"
"math/rand"
"os"
"runtime"
)
func main() {
// Random crashes, this seems to fix
runtime.LockOSThread()
var wWidth, wHeight int = 500, 500
// Initialize SDL
if err := sdl.Init(sdl.INIT_EVERYTHING); err != nil {
panic(err)
}
defer sdl.Quit()
// Initialize OpenGL
if err := gl.Init(); err != nil {
panic(err)
}
// Create the OpenGL-capable window
win, err := sdl.CreateWindow(
"glReadPixels Test",
sdl.WINDOWPOS_CENTERED,
sdl.WINDOWPOS_CENTERED,
wWidth, wHeight,
sdl.WINDOW_OPENGL)
if err != nil {
panic(err)
}
defer win.Destroy()
// Setup OpenGL context
var ctx sdl.GLContext
ctx, err = sdl.GL_CreateContext(win)
if err != nil {
panic(err)
}
defer sdl.GL_DeleteContext(ctx)
// Settings
initGL(wWidth, wHeight)
for {
for event := sdl.PollEvent(); event != nil; event = sdl.PollEvent() {
switch event.(type) {
case *sdl.QuitEvent:
os.Exit(0)
}
}
// Clear and draw
gl.Clear(gl.COLOR_BUFFER_BIT)
gl.DrawArrays(gl.TRIANGLE_STRIP, 0, 4)
rx, ry := rand.Intn(wWidth), rand.Intn(wHeight)
sdl.GL_SwapWindow(win)
// Check for errors...
if gl.GetError() != gl.NO_ERROR {
fmt.Println("GL ERROR Somewhere!")
}
sdl.Delay(uint32(300))
}
}
白猪掌柜的
相关分类