问题描述
我正在为SDL和OpenGL使用Go绑定。 这就是我加载纹理的方式:
func (sprite *Sprite) loadImage(name string) {
surf,err := img.Load(name)
if err != nil {
panic(err)
}
sprite.width = surf.W
sprite.height = surf.H
gl.Enable(gl.TEXTURE_2D)
gl.GenTextures(1,&sprite.tex)
gl.BindTexture(gl.TEXTURE_2D,sprite.tex)
gl.TexImage2D(gl.TEXTURE_2D,gl.RGBA8,surf.W,surf.H,gl.RGBA,gl.UNSIGNED_BYTE,surf.Data())
gl.BindTexture(gl.TEXTURE_2D,0)
gl.GenFramebuffers(1,&sprite.framebuffer)
gl.BindFramebuffer(gl.READ_FRAMEBUFFER,sprite.framebuffer)
gl.FramebufferTexture2D(gl.READ_FRAMEBUFFER,gl.COLOR_ATTACHMENT0,gl.TEXTURE_2D,sprite.tex,0)
gl.BindFramebuffer(gl.READ_FRAMEBUFFER,0)
}
我用以下方法绘制它:
func (sprite *Sprite) draw() {
gl.Enable(gl.BLEND)
gl.BlendFunc(gl.SRC_ALPHA,gl.ONE_MINUS_SRC_ALPHA)
gl.BindFramebuffer(gl.READ_FRAMEBUFFER,sprite.framebuffer)
gl.BlitFramebuffer(0,int32(sprite.width),int32(sprite.height),100,gl.COLOR_BUFFER_BIT,gl.LINEAR)
gl.BindFramebuffer(gl.READ_FRAMEBUFFER,0)
gl.disable(gl.BLEND)
}
绘制循环:
for running {
for event := sdl.PollEvent(); event != nil; event = sdl.PollEvent() {
switch event.(type) {
case *sdl.QuitEvent:
running = false
break
}
}
gl.ClearColor(0.3,1.0,0.3,1.0)
gl.Clear(gl.COLOR_BUFFER_BIT)
sp.draw()
window.GLSwap()
}
它可以正常工作,但是OpenGL似乎没有考虑Alpha-Channel。纹理的透明部分被绘制为黑色:
那我该如何使透明度起作用?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)