Texture.cpp revision be1b127c7bec252e0c6ab0e06ed6babed07d496f
18aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guy/* 28aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guy * Copyright (C) 2013 The Android Open Source Project 38aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guy * 48aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guy * Licensed under the Apache License, Version 2.0 (the "License"); 58aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guy * you may not use this file except in compliance with the License. 68aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guy * You may obtain a copy of the License at 78aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guy * 88aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guy * http://www.apache.org/licenses/LICENSE-2.0 98aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guy * 108aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guy * Unless required by applicable law or agreed to in writing, software 118aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guy * distributed under the License is distributed on an "AS IS" BASIS, 128aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guy * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 138aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guy * See the License for the specific language governing permissions and 148aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guy * limitations under the License. 158aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guy */ 168aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guy 178aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guy#define LOG_TAG "OpenGLRenderer" 188aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guy 198aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guy#include <utils/Log.h> 208aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guy 218aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guy#include "Caches.h" 228aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guy#include "Texture.h" 238aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guy 248aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guynamespace android { 258aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guynamespace uirenderer { 268aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guy 278aa195d7081b889f3a7b1f426cbd8556377aae5eRomain GuyTexture::Texture(): id(0), generation(0), blend(false), width(0), height(0), 288aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guy cleanup(false), bitmapSize(0), mipMap(false), uvMapper(NULL), 298aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guy mWrapS(GL_CLAMP_TO_EDGE), mWrapT(GL_CLAMP_TO_EDGE), 308aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guy mMinFilter(GL_NEAREST), mMagFilter(GL_NEAREST), 318aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guy mFirstFilter(true), mFirstWrap(true), mCaches(Caches::getInstance()) { 328aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guy} 338aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guy 348aa195d7081b889f3a7b1f426cbd8556377aae5eRomain GuyTexture::Texture(Caches& caches): id(0), generation(0), blend(false), width(0), height(0), 358aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guy cleanup(false), bitmapSize(0), mipMap(false), uvMapper(NULL), 368aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guy mWrapS(GL_CLAMP_TO_EDGE), mWrapT(GL_CLAMP_TO_EDGE), 378aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guy mMinFilter(GL_NEAREST), mMagFilter(GL_NEAREST), 388aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guy mFirstFilter(true), mFirstWrap(true), mCaches(caches) { 398aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guy} 408aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guy 418aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guyvoid Texture::setWrapST(GLenum wrapS, GLenum wrapT, bool bindTexture, bool force, 428aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guy GLenum renderTarget) { 438aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guy 448aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guy if (mFirstWrap || force || wrapS != mWrapS || wrapT != mWrapT) { 458aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guy mFirstWrap = false; 468aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guy 478aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guy mWrapS = wrapS; 488aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guy mWrapT = wrapT; 498aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guy 508aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guy if (bindTexture) { 518aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guy mCaches.bindTexture(renderTarget, id); 528aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guy } 538aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guy 548aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guy glTexParameteri(renderTarget, GL_TEXTURE_WRAP_S, wrapS); 558aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guy glTexParameteri(renderTarget, GL_TEXTURE_WRAP_T, wrapT); 568aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guy } 578aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guy} 588aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guy 598aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guyvoid Texture::setFilterMinMag(GLenum min, GLenum mag, bool bindTexture, bool force, 608aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guy GLenum renderTarget) { 618aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guy 628aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guy if (mFirstFilter || force || min != mMinFilter || mag != mMagFilter) { 638aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guy mFirstFilter = false; 648aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guy 658aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guy mMinFilter = min; 668aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guy mMagFilter = mag; 678aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guy 688aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guy if (bindTexture) { 698aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guy mCaches.bindTexture(renderTarget, id); 708aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guy } 718aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guy 728aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guy if (mipMap && min == GL_LINEAR) min = GL_LINEAR_MIPMAP_LINEAR; 738aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guy 748aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guy glTexParameteri(renderTarget, GL_TEXTURE_MIN_FILTER, min); 758aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guy glTexParameteri(renderTarget, GL_TEXTURE_MAG_FILTER, mag); 768aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guy } 778aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guy} 788aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guy 79be1b127c7bec252e0c6ab0e06ed6babed07d496fRomain Guyvoid Texture::deleteTexture() const { 80be1b127c7bec252e0c6ab0e06ed6babed07d496fRomain Guy mCaches.deleteTexture(id); 81be1b127c7bec252e0c6ab0e06ed6babed07d496fRomain Guy} 82be1b127c7bec252e0c6ab0e06ed6babed07d496fRomain Guy 838aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guy}; // namespace uirenderer 848aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guy}; // namespace android 85