18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* 2231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * Copyright (C) 2009 Apple Inc. All rights reserved. 38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Redistribution and use in source and binary forms, with or without 58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modification, are permitted provided that the following conditions 68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * are met: 78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 1. Redistributions of source code must retain the above copyright 88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * notice, this list of conditions and the following disclaimer. 98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright 108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * notice, this list of conditions and the following disclaimer in the 118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * documentation and/or other materials provided with the distribution. 128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY 148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR 178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 26643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#ifndef WebGLTexture_h 27643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#define WebGLTexture_h 288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 29dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch#include "WebGLObject.h" 308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 31231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#include <wtf/PassRefPtr.h> 32231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#include <wtf/RefCounted.h> 33967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch#include <wtf/Vector.h> 348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 35231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blocknamespace WebCore { 36643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 37dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdochclass WebGLTexture : public WebGLObject { 38dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdochpublic: 39dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch virtual ~WebGLTexture() { deleteObject(); } 408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 41dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch static PassRefPtr<WebGLTexture> create(WebGLRenderingContext*); 428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch void setTarget(GC3Denum target, GC3Dint maxLevel); 4465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch void setParameteri(GC3Denum pname, GC3Dint param); 4565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch void setParameterf(GC3Denum pname, GC3Dfloat param); 46967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch 472fc2651226baac27029e38c9d6ef883fa32084dbSteve Block GC3Denum getTarget() const { return m_target; } 482fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 49e14391e94c850b8bd03680c23b38978db68687a8John Reck int getMinFilter() const { return m_minFilter; } 50e14391e94c850b8bd03680c23b38978db68687a8John Reck 5165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch void setLevelInfo(GC3Denum target, GC3Dint level, GC3Denum internalFormat, GC3Dsizei width, GC3Dsizei height, GC3Denum type); 52967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch 53dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch bool canGenerateMipmaps(); 54dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch // Generate all level information. 55dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch void generateMipmapLevelInfo(); 566c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 5765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch GC3Denum getInternalFormat(GC3Denum target, GC3Dint level) const; 5865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch GC3Denum getType(GC3Denum target, GC3Dint level) const; 5965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch GC3Dsizei getWidth(GC3Denum target, GC3Dint level) const; 6065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch GC3Dsizei getHeight(GC3Denum target, GC3Dint level) const; 61967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch 62dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch // Whether width/height is NotPowerOfTwo. 6365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch static bool isNPOT(GC3Dsizei, GC3Dsizei); 646c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 65dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch bool isNPOT() const; 66dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch // Determine if texture sampling should always return [0, 0, 0, 1] (OpenGL ES 2.0 Sec 3.8.2). 67dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch bool needToUseBlackTexture() const; 688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 694576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang bool hasEverBeenBound() const { return object() && m_target; } 704576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang 7165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch static GC3Dint computeLevelCount(GC3Dsizei width, GC3Dsizei height); 728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 73dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdochprotected: 74dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch WebGLTexture(WebGLRenderingContext*); 7521939df44de1705786c545cd1bf519d47250322dBen Murdoch 76dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch virtual void deleteObjectImpl(Platform3DObject); 77967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch 78dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdochprivate: 79dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch class LevelInfo { 80dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch public: 81dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch LevelInfo() 82dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch : valid(false) 83dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch , internalFormat(0) 84dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch , width(0) 85dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch , height(0) 86dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch , type(0) 87dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch { 88dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch } 89967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch 9065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch void setInfo(GC3Denum internalFmt, GC3Dsizei w, GC3Dsizei h, GC3Denum tp) 91dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch { 92dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch valid = true; 93dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch internalFormat = internalFmt; 94dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch width = w; 95dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch height = h; 96dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch type = tp; 97dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch } 986c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 99dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch bool valid; 10065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch GC3Denum internalFormat; 10165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch GC3Dsizei width; 10265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch GC3Dsizei height; 10365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch GC3Denum type; 104231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block }; 105dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch 106cad810f21b803229eb11403f9209855525a25d57Steve Block virtual bool isTexture() const { return true; } 107cad810f21b803229eb11403f9209855525a25d57Steve Block 108cad810f21b803229eb11403f9209855525a25d57Steve Block void update(); 109cad810f21b803229eb11403f9209855525a25d57Steve Block 11065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch int mapTargetToIndex(GC3Denum) const; 111cad810f21b803229eb11403f9209855525a25d57Steve Block 11265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch const LevelInfo* getLevelInfo(GC3Denum target, GC3Dint level) const; 113cad810f21b803229eb11403f9209855525a25d57Steve Block 11465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch GC3Denum m_target; 115cad810f21b803229eb11403f9209855525a25d57Steve Block 11665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch GC3Denum m_minFilter; 11765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch GC3Denum m_magFilter; 11865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch GC3Denum m_wrapS; 11965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch GC3Denum m_wrapT; 120cad810f21b803229eb11403f9209855525a25d57Steve Block 121dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch Vector<Vector<LevelInfo> > m_info; 122dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch 123dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch bool m_isNPOT; 124dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch bool m_isComplete; 125dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch bool m_needToUseBlackTexture; 126dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch}; 127dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch 1288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} // namespace WebCore 1298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 130643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#endif // WebGLTexture_h 131