所以我试图制作一个跨平台程序,所以我避免使用太多的glkit特定功能。
无论如何,我现在已经将原始形状(点和三角形)绘制成了fbo的纹理。但是我现在需要对屏幕上的内容进行多次采样,使形状的边缘看起来更好。所以我的目标是制作另一个FBO(FBO 2),它可以消除另一个FBO(FBO 1)的纹理,并在屏幕上显示这个美丽的抗锯齿纹理。
不幸的是,我能找到的关于此的任何和所有资源都使用Apple的具体方法。而且我无论如何都无法工作。这是我用来制作和激活帧缓冲区的代码。
import Foundation
import GLKit
import OpenGLES
class RenderTexture2 {
var framebuffer:GLuint = 0
var tex:GLuint = 0
var old_fbo:GLint = 0
init(widthi: GLsizei, heighti: GLsizei)
{
}
func begin()
{
glGetIntegerv(GLenum(GL_FRAMEBUFFER_BINDING), &old_fbo)
glBindFramebuffer(GLenum(GL_FRAMEBUFFER), framebuffer)
}
func checkStatus()
{
let status = glCheckFramebufferStatus(GLenum(GL_FRAMEBUFFER))
if (status != GLenum(GL_FRAMEBUFFER_COMPLETE))
{
print("DIDNT GO WELL WITH")
print(status)
}
}
func end()
{
glBindFramebuffer(GLenum(GL_FRAMEBUFFER), GLenum(old_fbo))
}
func loadTexture(name: String, type: String) -> GLuint
{
var it:GLKTextureInfo = GLKTextureInfo()
let pic = UIImage(named: name + "." + type)!.CGImage
let path = NSBundle.mainBundle().pathForResource(name, ofType: type)
do
{
//try it = GLKTextureLoader.textureWithContentsOfFile(NSBundle.mainBundle().pathForResource(name, ofType: type)!, options: nil)
try it = GLKTextureLoader.textureWithContentsOfFile(path!, options: nil)
}
catch
{
do
{
//print("ERR Loading: " + path!)
try it = GLKTextureLoader.textureWithCGImage(pic!, options: nil)
}
catch
{
print("Error loading UIImage: " + pic.debugDescription)
it = GLKTextureInfo()
}
}
return it.name
}
func load(width: GLsizei, height: GLsizei)
{
glBindTexture(GLenum(GL_TEXTURE_2D), 0)
glGetIntegerv(GLenum(GL_FRAMEBUFFER_BINDING), &old_fbo)
glGenFramebuffers(1, &framebuffer)
tex = loadTexture("AF", type: "png")
glBindFramebuffer(GLenum(GL_FRAMEBUFFER), framebuffer)
//glTexParameteri(GLenum(GL_TEXTURE_2D), GLenum(GL_TEXTURE_MIN_FILTER), GL_NEAREST)
//glTexParameteri(GLenum(GL_TEXTURE_2D), GLenum(GL_TEXTURE_MAG_FILTER), GL_NEAREST)
glBindTexture(GLenum(GL_TEXTURE_2D), tex)
glTexImage2D(GLenum(GL_TEXTURE_2D), 0, GL_RGBA, GLsizei(width), GLsizei(height), 0, GLenum(GL_RGBA), GLenum(GL_UNSIGNED_BYTE), nil)
glFramebufferTexture2D(GLenum(GL_FRAMEBUFFER), GLenum(GL_COLOR_ATTACHMENT0), GLenum(GL_TEXTURE_2D), tex, 0)
glClearColor(0, 0.0, 0, 0.0)
glClear(GLenum(GL_COLOR_BUFFER_BIT))
let status = glCheckFramebufferStatus(GLenum(GL_FRAMEBUFFER))
if (status != GLenum(GL_FRAMEBUFFER_COMPLETE))
{
print("DIDNT GO WELL WITH", width, " " , height)
print(status)
}
glBindFramebuffer(GLenum(GL_FRAMEBUFFER), GLenum(old_fbo))
}
}
此代码现在可用作基本剪切和干燥fbo。
我需要做些什么来改变这项工作?也许如果我改变了一些纹理过滤/映射参数?
非常感谢!