165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn/* 265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * Copyright (C) 2011 The Android Open Source Project 365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * 465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * Licensed under the Apache License, Version 2.0 (the "License"); 565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * you may not use this file except in compliance with the License. 665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * You may obtain a copy of the License at 765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * 865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * http://www.apache.org/licenses/LICENSE-2.0 965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * 1065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * Unless required by applicable law or agreed to in writing, software 1165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * distributed under the License is distributed on an "AS IS" BASIS, 1265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * See the License for the specific language governing permissions and 1465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * limitations under the License. 1565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn */ 1665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 1765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn#ifndef ANDROID_FILTERFW_CORE_GL_FRAME_H 1865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn#define ANDROID_FILTERFW_CORE_GL_FRAME_H 1965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 2065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn#include <map> 2165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 2265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn#include <GLES2/gl2.h> 2365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 2465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn#include "core/gl_buffer_interface.h" 2565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 2665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennnamespace android { 2765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennnamespace filterfw { 2865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 2965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennclass GLEnv; 3065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennclass ShaderProgram; 3165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 3265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn// A GLFrame stores pixel data on the GPU. While pixel data may be uploaded to 3365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn// a GLFrame and also read out of a GLFrame (access in place is not supported), 3465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn// it is strongly recommended to use ShaderProgram objects for any kind of 3565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn// processing from one GLFrame to another. 3665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennclass GLFrame : public GLBufferHandle { 3765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn public: 3865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn // Create an empty GL frame in the specified GL environment. Note, that the GLFrame does NOT 3965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn // take ownership. The caller must make sure the GLEnv stays valid as long as the GLFrame is 4065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn // alive. 4165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn GLFrame(GLEnv* gl_env); 4265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 4365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn // Deallocate a GL frame. 4465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn ~GLFrame(); 4565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 4665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn // Initialize a GL frame to the given width, height, format. Also specify 4765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn // whether this is a read-only GL frame or not. 4865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn bool Init(int width, int height); 4965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 5065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn // Initialize as using an external texture. 5165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn bool InitWithExternalTexture(); 5265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 5365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn // Initialize using an existing texture. 5465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn bool InitWithTexture(GLint texture_id, int width, int height); 5565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 5665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn // Initialize using an existing FBO. 5765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn bool InitWithFbo(GLint fbo_id, int width, int height); 5865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 5965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn // Write the data with the given size in bytes to the frame. The frame size must match the 6065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn // size of the data. 6165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn bool WriteData(const uint8_t* data, int size); 6265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 6365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn // Copies the frame data to the given buffer. 6465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn bool CopyDataTo(uint8_t* buffer, int size); 6565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 6665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn // Copies the pixels from another GL frame to this frame. 6765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn bool CopyPixelsFrom(const GLFrame* frame); 6865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 6965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn // Returns the size of the buffer in bytes. 7065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn int Size() const; 7165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 7265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn // Clone the current frame by creating a new GL frame and copying all data to it. 7365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn GLFrame* Clone() const; 7465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 7565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn // Returns the held texture id. Only call this if the GLFrame holds a 7665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn // texture. You can check this by calling HoldsTexture(). 7765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn // Note, that a texture is created only when needed. If you are creating a 7865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn // new GLFrame, and you need it to be bound to a texture, upload (zeroed) 7965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn // data to it first, before calling this method. 8065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn GLuint GetTextureId() const; 8165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 8265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn // Returns the held FBO id. Only call this if the GLFrame holds an FBO. You 8365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn // can check this by calling HoldsFbo(). 8465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn GLuint GetFboId() const; 8565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 8665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn // Returns the texture target: GL_TEXTURE_2D or GL_TEXTURE_EXTERNAL_OES. 8765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn GLuint GetTextureTarget() const { 8865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return texture_target_; 8965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 9065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 9165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn // Set the viewport that will be used when focusing this frame for rendering. Defaults to 9265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn // the dimensions of the frame. 9365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn bool SetViewport(int x, int y, int width, int height); 9465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 9565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn // Binds the held texture. This may result in creating the texture if it 9665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn // is not yet available. 9765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn bool FocusTexture(); 9865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 9965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn // Binds the held FBO. This may result in creating the FBO if it 10065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn // is not yet available. 10165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn bool FocusFrameBuffer(); 10265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 10365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn // Generates the mipmap chain of the held texture. Returns true, iff 10465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn // generating was successful. 10565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn bool GenerateMipMap(); 10665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 10765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn // Set a texture parameter (see glTextureParameter documentation). Returns 10865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn // true iff the parameter was set successfully. 10965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn bool SetTextureParameter(GLenum pname, GLint value); 11065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 11165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn // Reset any modifed texture parameters. 11265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn bool ResetTexParameters(); 11365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 11465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn // Detaches the internal texture from the FBO. 11565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn bool DetachTextureFromFbo(); 11665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 11765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn // Reattaches the internal texture to the FBO after detachment. 11865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn bool ReattachTextureToFbo(); 11965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 12065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn private: 12165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn // Type to keep track of texture and FBO states 12265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn enum GLObjectState { 12365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn kStateUnmanaged, // We do not manage this object (externally managed) 12465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn kStateUninitialized, // Not yet initialized 12565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn kStateGenerated, // Tex/FBO id is generated 12665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn kStateComplete // FBO has valid attachment / Tex has valid pixel data 12765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn }; 12865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 12965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn // Sets the frame and viewport dimensions. 13065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn void InitDimensions(int width, int height); 13165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 13265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn // Generates the internal texture name. 13365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn bool GenerateTextureName(); 13465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 13565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn // Allocates the internal texture. 13665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn bool AllocateTexture(); 13765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 13865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn // Creates the internal FBO. 13965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn bool GenerateFboName(); 14065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 14165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn // Copies pixels from texture or FBO to the specified buffer. 14265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn bool CopyPixelsTo(uint8_t* buffer); 14365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 14465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn // Reads the pixels from the internal texture to the given buffer. 14565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn bool ReadTexturePixels(uint8_t* pixels) const; 14665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 14765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn // Reads the pixels from the internal FBO to the given buffer. 14865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn bool ReadFboPixels(uint8_t* pixels) const; 14965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 15065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn // Writes the specified pixels to the internal texture. 15165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn bool UploadTexturePixels(const uint8_t* pixels); 15265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 15365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn // Binds the internal texture. 15465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn bool BindTexture() const; 15565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 15665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn // Binds the internal FBO. 15765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn bool BindFrameBuffer() const; 15865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 15965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn // Attaches the internal texture to the internal FBO. 16065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn bool AttachTextureToFbo(); 16165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 16265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn // Update the texture parameters to the user specified parameters 16365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn bool UpdateTexParameters(); 16465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 16565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn // Returns true if the current texture parameters are not the GLES2 16665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn // default parameters. 16765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn bool TexParametersModifed(); 16865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 16965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn // Sets the current texture parameters to the GLES2 default 17065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn // parameters. This still requires a call to UpdateTexParameters() 17165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn // for the changes to take effect. 17265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn void SetDefaultTexParameters(); 17365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 17465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn // Returns true if the texture we assume to be allocated has been 17565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn // deleted externally. In this case we assume the texture name is 17665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn // still valid (otherwise we were provided with a bad texture id). 17765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn bool TextureWasDeleted() const; 17865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 17965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn // Get the (cached) identity shader. 18065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn ShaderProgram* GetIdentity() const; 18165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 18265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn // The GL environment this frame belongs to 18365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn GLEnv* gl_env_; 18465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 18565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn // The width, height and format of the frame 18665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn int width_; 18765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn int height_; 18865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 18965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn // The viewport dimensions 19065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn int vp_x_; 19165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn int vp_y_; 19265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn int vp_width_; 19365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn int vp_height_; 19465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 19565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn // The texture and FBO ids 19665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn GLuint texture_id_; 19765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn GLuint fbo_id_; 19865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 19965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn // The texture target: GL_TEXTURE_2D or GL_TEXTURE_EXTERNAL_OES 20065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn GLuint texture_target_; 20165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 20265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn // Flags whether or not frame holds a texture and FBO 20365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn GLObjectState texture_state_; 20465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn GLObjectState fbo_state_; 20565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 20665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn // Set of current texture parameters 20765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn std::map<GLenum, GLint> tex_params_; 20865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 20965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn // Flag whether frame owns the texture and FBO 21065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn bool owns_texture_; 21165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn bool owns_fbo_; 21265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn}; 21365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 21465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn} // namespace filterfw 21565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn} // namespace android 21665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 21765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn#endif // ANDROID_FILTERFW_CORE_GL_FRAME_H 218