OpenGL 일반 함수 노트
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 planeIndex
0, 평면 각표는 0번째 평면을 나타낸다. 예를 들어 YUV 데이터, Y는 0번째 평면, UV는 첫 번째 평면 textureOut
출력 무늬 대상 #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);
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.