//---------------------------------------------------------- void ofFbo::copyTo(ofBufferObject & buffer) const{ if(!bIsAllocated) return; bind(); buffer.bind(GL_PIXEL_PACK_BUFFER); glReadPixels(0, 0, settings.width, settings.height, ofGetGLFormatFromInternal(settings.internalformat), ofGetGlTypeFromInternal(settings.internalformat), NULL); buffer.unbind(GL_PIXEL_PACK_BUFFER); unbind(); }
//---------------------------------------------------------- void ofTexture::copyTo(ofBufferObject & buffer) const{ ofSetPixelStoreiAlignment(GL_PACK_ALIGNMENT,getWidth(),ofGetBytesPerChannelFromGLType(ofGetGlTypeFromInternal(texData.glInternalFormat)),ofGetNumChannelsFromGLFormat(ofGetGLFormatFromInternal(texData.glInternalFormat))); buffer.bind(GL_PIXEL_PACK_BUFFER); glBindTexture(texData.textureTarget,texData.textureID); glGetTexImage(texData.textureTarget,0,ofGetGLFormatFromInternal(texData.glInternalFormat),ofGetGlTypeFromInternal(texData.glInternalFormat),0); glBindTexture(texData.textureTarget,0); buffer.unbind(GL_PIXEL_PACK_BUFFER); }
//---------------------------------------------------------- void ofFbo::readToPixels(ofFloatPixels & pixels, int attachmentPoint) const{ if(!bIsAllocated) return; #ifndef TARGET_OPENGLES getTexture(attachmentPoint).readToPixels(pixels); #else pixels.allocate(settings.width,settings.height,ofGetImageTypeFromGLType(settings.internalformat)); bind(); int format = ofGetGLFormatFromInternal(settings.internalformat); glReadPixels(0,0,settings.width, settings.height, format, GL_FLOAT, pixels.getData()); unbind(); #endif }
void ofxTexture3d::allocate(int w, int h, int d, int internalGlDataType) { texData.tex_w = w; texData.tex_h = h; texData.tex_d = d; texData.tex_t = w; texData.tex_u = h; texData.tex_v = d; texData.textureTarget = GL_TEXTURE_3D; texData.glTypeInternal = internalGlDataType; // get the glType (format) and pixelType (type) corresponding to the glTypeInteral (internalFormat) texData.glType = ofGetGLFormatFromInternal(texData.glTypeInternal); texData.pixelType = ofGetGlTypeFromInternal(texData.glTypeInternal); // attempt to free the previous bound texture, if we can: clear(); glGenTextures(1, (GLuint *)&texData.textureID); retain(texData.textureID); glEnable(texData.textureTarget); glBindTexture(texData.textureTarget, (GLuint)texData.textureID); glTexImage3D(texData.textureTarget, 0, texData.glTypeInternal, (GLint)texData.tex_w, (GLint)texData.tex_h, (GLint)texData.tex_d, 0, texData.glType, texData.pixelType, 0); glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_R, GL_REPEAT); //glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); glDisable(texData.textureTarget); texData.width = w; texData.height = h; texData.depth = d; texData.bFlipTexture = false; texData.bAllocated = true; }
void ofTexture::allocate(const ofTextureData & textureData){ allocate(textureData,ofGetGLFormatFromInternal(textureData.glInternalFormat),ofGetGlTypeFromInternal(textureData.glInternalFormat)); }
//---------------------------------------------------------- void ofTexture::allocate(int w, int h, int glInternalFormat, bool bUseARBExtension){ allocate(w, h, glInternalFormat, bUseARBExtension, ofGetGLFormatFromInternal(glInternalFormat), ofGetGlTypeFromInternal(glInternalFormat)); }
//---------------------------------------------------------- void ofTexture::allocate(int w, int h, int glInternalFormat){ allocate(w, h, glInternalFormat, ofGetUsingArbTex(), ofGetGLFormatFromInternal(glInternalFormat), ofGetGlTypeFromInternal(glInternalFormat)); }
//---------------------------------------------------------- void ofTexture::allocate(int w, int h, int internalGlDataType, bool bUseARBExtention){ allocate(w, h, internalGlDataType, bUseARBExtention, ofGetGLFormatFromInternal(internalGlDataType), ofGetGlTypeFromInternal(internalGlDataType)); }
//---------------------------------------------------------- void ofTexture::allocate(int w, int h, int internalGlDataType){ allocate(w, h, internalGlDataType, ofGetUsingArbTex(), ofGetGLFormatFromInternal(internalGlDataType), ofGetGlTypeFromInternal(internalGlDataType)); }