OpenGL 일반 함수 노트

5979 단어
glTexImage2D
void glTexImage2D (
    GLenum target, 
    GLint level, 
    GLint internalformat, 
    GLsizei width, 
    GLsizei height, 
    GLint border, 
    GLenum format, 
    GLenum type, 
    const GLvoid *pixels
);

현재 귀속된 무늬 대상을 위해 메모리를 개척하고pixels 데이터를 상응하는 메모리에 채워 무늬 이미지를 생성합니다
  • target 매개변수는 텍스쳐 목표를 지정합니다.GL로 설정TEXTURE_2D는 현재 바인딩된 텍스쳐 객체와 동일한 대상에 텍스쳐를 생성합니다(GL TEXTURE 1D 및 GL TEXTURE 3D에 바인딩된 텍스쳐는 영향을 받지 않습니다).
  • level 매개 변수는 무늬에 다단계 점원 무늬의 등급을 지정합니다. 만약에 각 다단계 점원 무늬의 등급을 단독으로 수동으로 설정하고 싶다면.여기에 우리는 0, 즉 기본 등급을 기입한다.
  • internalformat 매개 변수는 OpenGL에 무늬를 어떤 형식으로 저장하고 싶은지 알려줍니다.우리의 이미지는 RGB 값만 있기 때문에 우리도 무늬를 RGB 값으로 저장한다.
  • width height 매개 변수는 최종 무늬의 너비와 높이를 설정합니다.그림을 불러올 때 저장했기 때문에 대응하는 변수를 사용합니다.
  • border 매개 변수는 항상 0(역사적으로 남겨진 문제)으로 설정되어야 한다.
  • format type 매개 변수는 원본 그림의 형식과 데이터 형식을 정의했다.우리는 RGB 값을 사용하여 이 그림을 불러오고 그것을 char(byte) 수조로 저장합니다. 우리는 대응하는 값을 전송할 것입니다.
  • pixels 매개 변수는 진정한 이미지 데이터입니다.

  • glFramebufferTexture2D
    void glFramebufferTexture2D (
        GLenum target, 
        GLenum attachment, 
        GLenum textarget, 
        GLuint texture, 
        GLint level
    );
    

    프레임 버퍼에 무늬 첨부 파일 연결하기
  • target: 프레임 버퍼 타겟 GL_FRAMEBUFFER GL_READ_FRAMEBUFFER GL_DRAW_FRAMEBUFFER
  • attachment: 첨부 파일 유형을 추가합니다.색상, 깊이, 템플릿 GL_COLOR_ATTACHMENT0 GL_DEPTH_ATTACHMENT GL_STENCIL_ATTACHMENT
  • textarget: 원하는 텍스처 유형 GL_TEXTURE_2D
  • texture: 추가할 텍스처 자체
  • level: 다단계 점원 무늬의 등급.우리는 그것을 0으로 보류할 것이다.

  • eg:색상 첨부
    unsigned int texture;
    glGenTextures(1, &texture);
    glBindTexture(GL_TEXTURE_2D, texture);
    
    //      ,               。                      
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 800, 600, 0, GL_RGB, GL_UNSIGNED_BYTE, NULL);
    
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    
    //           
    glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture, 0);
    

    깊이 템플릿 첨부 파일
    glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH24_STENCIL8, 800, 600, 0, GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8, NULL);
    
    glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_TEXTURE_2D, texture, 0);
    
    

    CVOpenGLESTextureCacheCreateTextureFromImage
    CVOpenGLESTextureCacheCreateTextureFromImage(
        CFAllocatorRef  _Nullable allocator, 
        CVOpenGLESTextureCacheRef  _Nonnull textureCache, 
        CVImageBufferRef  _Nonnull sourceImage, 
        CFDictionaryRef  _Nullable textureAttributes, 
        GLenum target, 
        GLint internalFormat, 
        GLsizei width, 
        GLsizei height, 
        GLenum format, 
        GLenum type, 
        size_t planeIndex, 
        CVOpenGLESTextureRef  _Nullable * _Nonnull textureOut
    );
    

    그림에 따라 무늬 대상을 생성하다
  • 매개 변수 allocator kCFAllocatorDefault, 기본 할당 메모리
  • 매개 변수 textureCache 텍스처 캐시
  • 매개 변수 sourceImage 이미지
  • 매개 변수 textureAttributes NULL
  • 매개변수 target, GLTEXTURE_2D(2차원 텍스쳐 객체 작성)
  • 매개변수 internalFormat GLLUMINANCE, 밝기
  • 매개 변수 width 이미지 너비
  • 매개 변수 height 이미지 높이
  • 매개변수 format GLLUMINANCE 밝기 형식
  • 매개 변수 type 이미지 유형 GLUNSIGNED_BYTE
  • 매개 변수 planeIndex0, 평면 각표는 0번째 평면을 나타낸다. 예를 들어 YUV 데이터, Y는 0번째 평면, UV는 첫 번째 평면
  • 이다.
  • 매개 변수 textureOut 출력 무늬 대상
  • eg:
    #pragma mark - 7、      ,         
    - (void)setupTexture:(CMSampleBufferRef)sampleBuffer
    {
        //       
        CVImageBufferRef imageBufferRef = CMSampleBufferGetImageBuffer(sampleBuffer);
    
        //       
        GLsizei bufferWidth = (GLsizei)CVPixelBufferGetWidth(imageBufferRef);
        _bufferWidth = bufferWidth;
        GLsizei bufferHeight = (GLsizei)CVPixelBufferGetHeight(imageBufferRef);
        _bufferHeight = bufferHeight;
    
        //       
        //       0,    ,       
        glActiveTexture(GL_TEXTURE0);
    
        //       
        CVReturn err;
        err = CVOpenGLESTextureCacheCreateTextureFromImage(kCFAllocatorDefault, _textureCacheRef, imageBufferRef, NULL, GL_TEXTURE_2D, GL_LUMINANCE, bufferWidth, bufferHeight, GL_LUMINANCE, GL_UNSIGNED_BYTE, 0, &_luminanceTextureRef);
        if (err) {
            NSLog(@"Error at CVOpenGLESTextureCacheCreateTextureFromImage %d", err);
        }
        //       id
        _luminanceTexture = CVOpenGLESTextureGetName(_luminanceTextureRef);
         
        //     
        glBindTexture(CVOpenGLESTextureGetTarget(renderTexture), _luminanceTexture);
        
        //CVOpenGLESTextureGetTarget(renderTexture)       target,    GL_TEXTURE_2D,        
        //glBindTexture(GL_TEXTURE_2D, _luminanceTexture);
       
    
        //       
        glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
        glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
    
        //     1
        glActiveTexture(GL_TEXTURE1);
    
        //       
        err = CVOpenGLESTextureCacheCreateTextureFromImage(kCFAllocatorDefault, _textureCacheRef, imageBufferRef, NULL, GL_TEXTURE_2D, GL_LUMINANCE_ALPHA, bufferWidth / 2, bufferHeight / 2, GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE, 1, &_chrominanceTextureRef);
        if (err) {
            NSLog(@"Error at CVOpenGLESTextureCacheCreateTextureFromImage %d", err);
        }
        //       
        _chrominanceTexture = CVOpenGLESTextureGetName(_chrominanceTextureRef);
    
        //     
        glBindTexture(GL_TEXTURE_2D, _chrominanceTexture);
    
        //       
        glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
        glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
    }
    

    좋은 웹페이지 즐겨찾기