Ios 如何将OpenGL sampler2d纹理绑定到swift中SCNProgram的片段着色器?

Ios 如何将OpenGL sampler2d纹理绑定到swift中SCNProgram的片段着色器?,ios,swift,opengl-es,scenekit,Ios,Swift,Opengl Es,Scenekit,我创建了一个SCN程序,并为它们加载顶点和片段着色器 let pro = SCNProgram() var path = Bundle.main.path(forResource: "Shader", ofType: "vert") do{ let vertexShader = try String(contentsOfFile: path!, encoding: .utf8) pro.vertexShader = vertexShader }catch{} path = Bun

我创建了一个SCN程序,并为它们加载顶点和片段着色器

let pro = SCNProgram()
var path = Bundle.main.path(forResource: "Shader", ofType: "vert")
do{
    let vertexShader = try String(contentsOfFile: path!, encoding: .utf8)
    pro.vertexShader = vertexShader
}catch{}
path = Bundle.main.path(forResource: "Shader", ofType: "frag")
do{
    let fragmentShader = try String(contentsOfFile: path!, encoding: .utf8)
    pro.fragmentShader = fragmentShader
}catch{}
片段着色器的代码如下所示:

uniform sampler2D ourTexture1; uniform sampler2D ourTexture2; void main() { vec4 tex1 = texture(ourTexture1, TexCoord); vec4 tex2 = texture(ourTexture2, TexCoord); color = vec4(mix(tex1.xyz, tex2.xyz, tex2.w), 1.0f); }
生成纹理的代码如下所示:

var texture1:GLuint = 0
glGenTextures(1, &texture1)
glBindTexture(GLenum(GL_TEXTURE_2D), texture1)

// Set texture wrapping to GL_REPEAT (usually basic wrapping method)
glTexParameteri(GLenum(GL_TEXTURE_2D), GLenum(GL_TEXTURE_WRAP_S), GL_REPEAT)
glTexParameteri(GLenum(GL_TEXTURE_2D), GLenum(GL_TEXTURE_WRAP_T), GL_REPEAT)

// Set texture filtering parameters
glTexParameteri(GLenum(GL_TEXTURE_2D), GLenum(GL_TEXTURE_MIN_FILTER), GL_LINEAR)
glTexParameteri(GLenum(GL_TEXTURE_2D), GLenum(GL_TEXTURE_MAG_FILTER), GL_LINEAR)

// Load and generate the texture
let loader = SGLImageLoader(fromFile: "img.png")
if (loader.error != nil) { fatalError(loader.error!) }
let image = SGLImageRGB<UInt8>(loader)
if (loader.error != nil) { fatalError(loader.error!) }

// Create texture and generate mipmaps
image.withUnsafeMutableBufferPointer() {
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB,
                 GLsizei(image.width),
                 GLsizei(image.height),
                 0, GL_RGB, GL_UNSIGNED_BYTE,
                 $0.baseAddress)
}
glGenerateMipmap(GLenum(GL_TEXTURE_2D))

glBindTexture(GLenum(GL_TEXTURE_2D), 0)
var texture1:GLuint=0
glGenTextures(1和纹理1)
glBindTexture(GLenum(GL_TEXTURE_2D),texture1)
//将纹理换行设置为GL_REPEAT(通常为基本换行方法)
glTexParameteri(盂(GL_纹理_2D)、盂(GL_纹理_包裹_S)、GL_重复)
glTexParameteri(盂(GL_纹理_2D)、盂(GL_纹理_包裹_T)、GL_重复)
//设置纹理过滤参数
glTexParameteri(GLenum(GL_纹理_2D)、GLenum(GL_纹理_MIN_过滤器)、GL_线性)
glTexParameteri(GLenum(GL_纹理_2D)、GLenum(GL_纹理_MAG_过滤器)、GL_线性)
//加载并生成纹理
let loader=SGLImageLoader(来自文件:“img.png”)
if(loader.error!=nil){fatalError(loader.error!)}
让image=SGLImageRGB(加载器)
if(loader.error!=nil){fatalError(loader.error!)}
//创建纹理并生成纹理贴图
image.withUnsafeMutableBufferPointer(){
GLTEXAGE2D(GL_纹理_2D,0,GL_RGB,
GLsizei(图像宽度),
GLsizei(图像高度),
0,GL_RGB,GL_无符号字节,
$0。基本地址)
}
GLGENATEMIPMAP(盂(GL_纹理_2D))
glBindTexture(GLenum(GL_TEXTURE_2D),0)
对于texture2,代码与上面相同。现在我的问题是如何将生成的纹理绑定到SCNProgram片段着色器的“uniform sampler2D ourTexture1”和“uniform sampler2D ourTexture2”