Passes the Renderer to various objects at construction time.

TRAC #22000 Signed-off-by: Daniel Koch Author: Shannon Woods git-svn-id: https://angleproject.googlecode.com/svn/branches/dx11proto@1406 736b8ea6-26fd-11df-bfd4-992fa37f6226
parent 16418b11
......@@ -17,9 +17,10 @@
namespace gl
{
Buffer::Buffer(GLuint id) : RefCountObject(id)
Buffer::Buffer(rx::Renderer *renderer, GLuint id) : RefCountObject(id)
{
mRenderer = getDisplay()->getRenderer9();
ASSERT(dynamic_cast<rx::Renderer9*>(renderer) != NULL); // D3D9_REPLACE
mRenderer = static_cast<rx::Renderer9*>(renderer);
mContents = NULL;
mSize = 0;
mUsage = GL_DYNAMIC_DRAW;
......
......@@ -29,7 +29,7 @@ class StaticIndexBuffer;
class Buffer : public RefCountObject
{
public:
explicit Buffer(GLuint id);
Buffer(rx::Renderer *renderer, GLuint id);
virtual ~Buffer();
......
......@@ -321,8 +321,8 @@ void Context::makeCurrent(egl::Surface *surface)
// Wrap the existing swapchain resources into GL objects and assign them to the '0' names
rx::SwapChain *swapchain = surface->getSwapChain();
Colorbuffer *colorbufferZero = new Colorbuffer(swapchain);
DepthStencilbuffer *depthStencilbufferZero = new DepthStencilbuffer(swapchain);
Colorbuffer *colorbufferZero = new Colorbuffer(mRenderer, swapchain);
DepthStencilbuffer *depthStencilbufferZero = new DepthStencilbuffer(mRenderer, swapchain);
Framebuffer *framebufferZero = new DefaultFramebuffer(mRenderer, colorbufferZero, depthStencilbufferZero);
setFramebufferZero(framebufferZero);
......@@ -1250,8 +1250,31 @@ void Context::setFramebufferZero(Framebuffer *buffer)
}
}
void Context::setRenderbufferStorage(RenderbufferStorage *renderbuffer)
void Context::setRenderbufferStorage(GLsizei width, GLsizei height, GLenum internalformat, GLsizei samples)
{
RenderbufferStorage *renderbuffer = NULL;
switch (internalformat)
{
case GL_DEPTH_COMPONENT16:
renderbuffer = new gl::Depthbuffer(mRenderer, width, height, samples);
break;
case GL_RGBA4:
case GL_RGB5_A1:
case GL_RGB565:
case GL_RGB8_OES:
case GL_RGBA8_OES:
renderbuffer = new gl::Colorbuffer(mRenderer,width, height, internalformat, samples);
break;
case GL_STENCIL_INDEX8:
renderbuffer = new gl::Stencilbuffer(mRenderer, width, height, samples);
break;
case GL_DEPTH24_STENCIL8_OES:
renderbuffer = new gl::DepthStencilbuffer(mRenderer, width, height, samples);
break;
default:
UNREACHABLE(); return;
}
Renderbuffer *renderbufferObject = mState.renderbuffer.get();
renderbufferObject->setStorage(renderbuffer);
}
......
......@@ -426,7 +426,7 @@ class Context
void setFramebufferZero(Framebuffer *framebuffer);
void setRenderbufferStorage(RenderbufferStorage *renderbuffer);
void setRenderbufferStorage(GLsizei width, GLsizei height, GLenum internalformat, GLsizei samples);
void setVertexAttrib(GLuint index, const GLfloat *values);
void setVertexAttribDivisor(GLuint index, GLuint divisor);
......
......@@ -219,7 +219,7 @@ Renderbuffer *Framebuffer::getNullColorbuffer()
if (!nullbuffer ||
width != nullbuffer->getWidth() || height != nullbuffer->getHeight())
{
nullbuffer = new Renderbuffer(0, new Colorbuffer(width, height, GL_NONE, 0));
nullbuffer = new Renderbuffer(mRenderer, 0, new Colorbuffer(mRenderer, width, height, GL_NONE, 0));
mNullColorbufferPointer.set(nullbuffer);
}
......@@ -477,9 +477,9 @@ GLenum Framebuffer::completeness()
DefaultFramebuffer::DefaultFramebuffer(rx::Renderer *renderer, Colorbuffer *colorbuffer, DepthStencilbuffer *depthStencil)
: Framebuffer(renderer)
{
mColorbufferPointer.set(new Renderbuffer(0, colorbuffer));
mColorbufferPointer.set(new Renderbuffer(mRenderer, 0, colorbuffer));
Renderbuffer *depthStencilRenderbuffer = new Renderbuffer(0, depthStencil);
Renderbuffer *depthStencilRenderbuffer = new Renderbuffer(mRenderer, 0, depthStencil);
mDepthbufferPointer.set(depthStencilRenderbuffer);
mStencilbufferPointer.set(depthStencilRenderbuffer);
......
......@@ -136,7 +136,7 @@ void InfoLog::reset()
}
}
Program::Program(ResourceManager *manager, GLuint handle) : mResourceManager(manager), mHandle(handle)
Program::Program(rx::Renderer *renderer, ResourceManager *manager, GLuint handle) : mResourceManager(manager), mHandle(handle)
{
mFragmentShader = NULL;
mVertexShader = NULL;
......@@ -144,6 +144,7 @@ Program::Program(ResourceManager *manager, GLuint handle) : mResourceManager(man
mDeleteStatus = false;
mLinked = false;
mRefCount = 0;
mRenderer = renderer;
}
Program::~Program()
......@@ -247,7 +248,7 @@ bool Program::link()
mInfoLog.reset();
mProgramBinary.set(new ProgramBinary());
mProgramBinary.set(new ProgramBinary(mRenderer));
mLinked = mProgramBinary->link(mInfoLog, mAttributeBindings, mFragmentShader, mVertexShader);
return mLinked;
......@@ -304,7 +305,7 @@ bool Program::setProgramBinary(const void *binary, GLsizei length)
mInfoLog.reset();
mProgramBinary.set(new ProgramBinary());
mProgramBinary.set(new ProgramBinary(mRenderer));
mLinked = mProgramBinary->load(mInfoLog, binary, length);
if (!mLinked)
{
......
......@@ -57,7 +57,7 @@ class InfoLog
class Program
{
public:
Program(ResourceManager *manager, GLuint handle);
Program(rx::Renderer *renderer, ResourceManager *manager, GLuint handle);
~Program();
......@@ -112,6 +112,7 @@ class Program
unsigned int mRefCount;
ResourceManager *mResourceManager;
rx::Renderer *mRenderer;
const GLuint mHandle;
InfoLog mInfoLog;
......
......@@ -62,9 +62,10 @@ UniformLocation::UniformLocation(const std::string &_name, unsigned int element,
unsigned int ProgramBinary::mCurrentSerial = 1;
ProgramBinary::ProgramBinary() : RefCountObject(0), mSerial(issueSerial())
ProgramBinary::ProgramBinary(rx::Renderer *renderer) : RefCountObject(0), mSerial(issueSerial())
{
mRenderer = getDisplay()->getRenderer9();
ASSERT(dynamic_cast<rx::Renderer9*>(renderer) != NULL); // D3D9_REPLACE
mRenderer = static_cast<rx::Renderer9*>(renderer);
mDevice = mRenderer->getDevice(); // D3D9_REPLACE
mPixelExecutable = NULL;
......
......@@ -98,7 +98,7 @@ struct UniformLocation
class ProgramBinary : public RefCountObject
{
public:
ProgramBinary();
explicit ProgramBinary(rx::Renderer *renderer);
~ProgramBinary();
IDirect3DPixelShader9 *getPixelShader();
......
......@@ -203,7 +203,7 @@ unsigned int RenderbufferTextureCubeMap::getSerial() const
////// Renderbuffer Implementation //////
Renderbuffer::Renderbuffer(GLuint id, RenderbufferInterface *instance) : RefCountObject(id)
Renderbuffer::Renderbuffer(rx::Renderer *renderer, GLuint id, RenderbufferInterface *instance) : RefCountObject(id)
{
ASSERT(instance != NULL);
mInstance = instance;
......@@ -382,7 +382,7 @@ unsigned int RenderbufferStorage::issueCubeSerials()
return firstSerial;
}
Colorbuffer::Colorbuffer(rx::SwapChain *swapChain)
Colorbuffer::Colorbuffer(rx::Renderer *renderer, rx::SwapChain *swapChain)
{
mRenderTarget = swapChain->getRenderTarget();
if (mRenderTarget)
......@@ -399,13 +399,14 @@ Colorbuffer::Colorbuffer(rx::SwapChain *swapChain)
}
}
Colorbuffer::Colorbuffer(int width, int height, GLenum format, GLsizei samples) : mRenderTarget(NULL)
Colorbuffer::Colorbuffer(rx::Renderer *renderer, int width, int height, GLenum format, GLsizei samples) : mRenderTarget(NULL)
{
rx::Renderer9 *renderer = getDisplay()->getRenderer9();
IDirect3DDevice9 *device = renderer->getDevice(); // D3D9_REPLACE
ASSERT(dynamic_cast<rx::Renderer9*>(renderer) != NULL); // D3D9_REPLACE
rx::Renderer9 *renderer9 = static_cast<rx::Renderer9*>(renderer); // D3D9_REPLACE
IDirect3DDevice9 *device = renderer9->getDevice(); // D3D9_REPLACE
D3DFORMAT requestedFormat = es2dx::ConvertRenderbufferFormat(format);
int supportedSamples = renderer->getNearestSupportedSamples(requestedFormat, samples);
int supportedSamples = renderer9->getNearestSupportedSamples(requestedFormat, samples);
if (supportedSamples == -1)
{
......@@ -457,7 +458,7 @@ IDirect3DSurface9 *Colorbuffer::getRenderTarget()
return mRenderTarget;
}
DepthStencilbuffer::DepthStencilbuffer(rx::SwapChain *swapChain)
DepthStencilbuffer::DepthStencilbuffer(rx::Renderer *renderer, rx::SwapChain *swapChain)
{
mDepthStencil = swapChain->getDepthStencil();
if (mDepthStencil)
......@@ -474,14 +475,15 @@ DepthStencilbuffer::DepthStencilbuffer(rx::SwapChain *swapChain)
}
}
DepthStencilbuffer::DepthStencilbuffer(int width, int height, GLsizei samples)
DepthStencilbuffer::DepthStencilbuffer(rx::Renderer *renderer, int width, int height, GLsizei samples)
{
rx::Renderer9 *renderer = getDisplay()->getRenderer9();
IDirect3DDevice9 *device = renderer->getDevice(); // D3D9_REPLACE
ASSERT(dynamic_cast<rx::Renderer9*>(renderer) != NULL); // D3D9_REPLACE
rx::Renderer9 *renderer9 = static_cast<rx::Renderer9*>(renderer); // D3D9_REPLACE
IDirect3DDevice9 *device = renderer9->getDevice(); // D3D9_REPLACE
mDepthStencil = NULL;
int supportedSamples = renderer->getNearestSupportedSamples(D3DFMT_D24S8, samples);
int supportedSamples = renderer9->getNearestSupportedSamples(D3DFMT_D24S8, samples);
if (supportedSamples == -1)
{
......@@ -533,7 +535,7 @@ IDirect3DSurface9 *DepthStencilbuffer::getDepthStencil()
return mDepthStencil;
}
Depthbuffer::Depthbuffer(int width, int height, GLsizei samples) : DepthStencilbuffer(width, height, samples)
Depthbuffer::Depthbuffer(rx::Renderer *renderer, int width, int height, GLsizei samples) : DepthStencilbuffer(renderer, width, height, samples)
{
if (mDepthStencil)
{
......@@ -547,7 +549,7 @@ Depthbuffer::~Depthbuffer()
{
}
Stencilbuffer::Stencilbuffer(int width, int height, GLsizei samples) : DepthStencilbuffer(width, height, samples)
Stencilbuffer::Stencilbuffer(rx::Renderer *renderer, int width, int height, GLsizei samples) : DepthStencilbuffer(renderer, width, height, samples)
{
if (mDepthStencil)
{
......
......@@ -21,6 +21,11 @@
#include "renderer/SwapChain.h"
namespace rx
{
class Renderer;
}
namespace gl
{
class Texture2D;
......@@ -163,7 +168,7 @@ class RenderbufferStorage : public RenderbufferInterface
class Renderbuffer : public RefCountObject
{
public:
Renderbuffer(GLuint id, RenderbufferInterface *storage);
Renderbuffer(rx::Renderer *renderer, GLuint id, RenderbufferInterface *storage);
virtual ~Renderbuffer();
......@@ -202,8 +207,8 @@ class Renderbuffer : public RefCountObject
class Colorbuffer : public RenderbufferStorage
{
public:
explicit Colorbuffer(rx::SwapChain *swapChain);
Colorbuffer(GLsizei width, GLsizei height, GLenum format, GLsizei samples);
Colorbuffer(rx::Renderer *renderer, rx::SwapChain *swapChain);
Colorbuffer(rx::Renderer *renderer, GLsizei width, GLsizei height, GLenum format, GLsizei samples);
virtual ~Colorbuffer();
......@@ -218,8 +223,8 @@ class Colorbuffer : public RenderbufferStorage
class DepthStencilbuffer : public RenderbufferStorage
{
public:
explicit DepthStencilbuffer(rx::SwapChain *swapChain);
DepthStencilbuffer(GLsizei width, GLsizei height, GLsizei samples);
DepthStencilbuffer(rx::Renderer *renderer, rx::SwapChain *swapChain);
DepthStencilbuffer(rx::Renderer *renderer, GLsizei width, GLsizei height, GLsizei samples);
~DepthStencilbuffer();
......@@ -235,7 +240,7 @@ class DepthStencilbuffer : public RenderbufferStorage
class Depthbuffer : public DepthStencilbuffer
{
public:
Depthbuffer(GLsizei width, GLsizei height, GLsizei samples);
Depthbuffer(rx::Renderer *renderer, GLsizei width, GLsizei height, GLsizei samples);
virtual ~Depthbuffer();
......@@ -246,7 +251,7 @@ class Depthbuffer : public DepthStencilbuffer
class Stencilbuffer : public DepthStencilbuffer
{
public:
Stencilbuffer(GLsizei width, GLsizei height, GLsizei samples);
Stencilbuffer(rx::Renderer *renderer, GLsizei width, GLsizei height, GLsizei samples);
virtual ~Stencilbuffer();
......
......@@ -98,7 +98,7 @@ GLuint ResourceManager::createProgram()
{
GLuint handle = mProgramShaderHandleAllocator.allocate();
mProgramMap[handle] = new Program(this, handle);
mProgramMap[handle] = new Program(mRenderer, this, handle);
return handle;
}
......@@ -278,7 +278,7 @@ void ResourceManager::checkBufferAllocation(unsigned int buffer)
{
if (buffer != 0 && !getBuffer(buffer))
{
Buffer *bufferObject = new Buffer(buffer);
Buffer *bufferObject = new Buffer(mRenderer, buffer);
mBufferMap[buffer] = bufferObject;
bufferObject->addRef();
}
......@@ -313,7 +313,7 @@ void ResourceManager::checkRenderbufferAllocation(GLuint renderbuffer)
{
if (renderbuffer != 0 && !getRenderbuffer(renderbuffer))
{
Renderbuffer *renderbufferObject = new Renderbuffer(renderbuffer, new Colorbuffer(0, 0, GL_RGBA4, 0));
Renderbuffer *renderbufferObject = new Renderbuffer(mRenderer, renderbuffer, new Colorbuffer(mRenderer, 0, 0, GL_RGBA4, 0));
mRenderbufferMap[renderbuffer] = renderbufferObject;
renderbufferObject->addRef();
}
......
......@@ -445,7 +445,7 @@ void Texture2D::bindTexImage(egl::Surface *surface)
delete mTexStorage;
rx::SwapChain *swapchain = surface->getSwapChain(); // D3D9_REPLACE
mTexStorage = new TextureStorage2D(swapchain);
mTexStorage = new TextureStorage2D(mRenderer, swapchain);
mDirtyImages = true;
mSurface = surface;
......@@ -582,7 +582,7 @@ void Texture2D::copySubImage(GLenum target, GLint level, GLint xoffset, GLint yo
void Texture2D::storage(GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height)
{
delete mTexStorage;
mTexStorage = new TextureStorage2D(levels, internalformat, mUsage, false, width, height);
mTexStorage = new TextureStorage2D(mRenderer, levels, internalformat, mUsage, false, width, height);
mImmutable = true;
for (int level = 0; level < levels; level++)
......@@ -723,7 +723,7 @@ void Texture2D::createTexture()
GLenum internalformat = mImageArray[0].getInternalFormat();
delete mTexStorage;
mTexStorage = new TextureStorage2D(levels, internalformat, mUsage, false, width, height);
mTexStorage = new TextureStorage2D(mRenderer, levels, internalformat, mUsage, false, width, height);
if (mTexStorage->isManaged())
{
......@@ -766,7 +766,7 @@ void Texture2D::convertToRenderTarget()
GLint levels = creationLevels(width, height);
GLenum internalformat = mImageArray[0].getInternalFormat();
newTexStorage = new TextureStorage2D(levels, internalformat, GL_FRAMEBUFFER_ATTACHMENT_ANGLE, true, width, height);
newTexStorage = new TextureStorage2D(mRenderer, levels, internalformat, GL_FRAMEBUFFER_ATTACHMENT_ANGLE, true, width, height);
if (mTexStorage != NULL)
{
......@@ -830,7 +830,7 @@ Renderbuffer *Texture2D::getRenderbuffer(GLenum target)
if (mColorbufferProxy == NULL)
{
mColorbufferProxy = new Renderbuffer(id(), new RenderbufferTexture2D(this, target));
mColorbufferProxy = new Renderbuffer(mRenderer, id(), new RenderbufferTexture2D(this, target));
}
return mColorbufferProxy;
......@@ -1171,7 +1171,7 @@ void TextureCubeMap::createTexture()
GLenum internalformat = mImageArray[0][0].getInternalFormat();
delete mTexStorage;
mTexStorage = new TextureStorageCubeMap(levels, internalformat, mUsage, false, size);
mTexStorage = new TextureStorageCubeMap(mRenderer, levels, internalformat, mUsage, false, size);
if (mTexStorage->isManaged())
{
......@@ -1219,7 +1219,7 @@ void TextureCubeMap::convertToRenderTarget()
GLint levels = creationLevels(size);
GLenum internalformat = mImageArray[0][0].getInternalFormat();
newTexStorage = new TextureStorageCubeMap(levels, internalformat, GL_FRAMEBUFFER_ATTACHMENT_ANGLE, true, size);
newTexStorage = new TextureStorageCubeMap(mRenderer, levels, internalformat, GL_FRAMEBUFFER_ATTACHMENT_ANGLE, true, size);
if (mTexStorage != NULL)
{
......@@ -1355,7 +1355,7 @@ void TextureCubeMap::copySubImage(GLenum target, GLint level, GLint xoffset, GLi
void TextureCubeMap::storage(GLsizei levels, GLenum internalformat, GLsizei size)
{
delete mTexStorage;
mTexStorage = new TextureStorageCubeMap(levels, internalformat, mUsage, false, size);
mTexStorage = new TextureStorageCubeMap(mRenderer, levels, internalformat, mUsage, false, size);
mImmutable = true;
for (int level = 0; level < levels; level++)
......@@ -1451,7 +1451,7 @@ Renderbuffer *TextureCubeMap::getRenderbuffer(GLenum target)
if (mFaceProxies[face] == NULL)
{
mFaceProxies[face] = new Renderbuffer(id(), new RenderbufferTextureCubeMap(this, target));
mFaceProxies[face] = new Renderbuffer(mRenderer, id(), new RenderbufferTextureCubeMap(this, target));
}
return mFaceProxies[face];
......
......@@ -4837,20 +4837,14 @@ void __stdcall glRenderbufferStorageMultisampleANGLE(GLenum target, GLsizei samp
switch (internalformat)
{
case GL_DEPTH_COMPONENT16:
context->setRenderbufferStorage(new gl::Depthbuffer(width, height, samples));
break;
case GL_RGBA4:
case GL_RGB5_A1:
case GL_RGB565:
case GL_RGB8_OES:
case GL_RGBA8_OES:
context->setRenderbufferStorage(new gl::Colorbuffer(width, height, internalformat, samples));
break;
case GL_STENCIL_INDEX8:
context->setRenderbufferStorage(new gl::Stencilbuffer(width, height, samples));
break;
case GL_DEPTH24_STENCIL8_OES:
context->setRenderbufferStorage(new gl::DepthStencilbuffer(width, height, samples));
context->setRenderbufferStorage(width, height, internalformat, samples);
break;
default:
return error(GL_INVALID_ENUM);
......
......@@ -21,9 +21,10 @@ namespace gl
{
unsigned int TextureStorage::mCurrentTextureSerial = 1;
TextureStorage::TextureStorage(DWORD usage)
TextureStorage::TextureStorage(rx::Renderer *renderer, DWORD usage)
: mD3DUsage(usage),
mD3DPool(getDisplay()->getRenderer9()->getTexturePool(usage)), // D3D9_REPLACE
mRenderer(renderer),
mTextureSerial(issueTextureSerial()),
mLodOffset(0)
{
......@@ -206,14 +207,14 @@ bool TextureStorage::copyToRenderTarget(IDirect3DSurface9 *dest, IDirect3DSurfac
return true;
}
TextureStorage2D::TextureStorage2D(rx::SwapChain *swapchain) : TextureStorage(D3DUSAGE_RENDERTARGET), mRenderTargetSerial(RenderbufferStorage::issueSerial())
TextureStorage2D::TextureStorage2D(rx::Renderer *renderer, rx::SwapChain *swapchain) : TextureStorage(renderer, D3DUSAGE_RENDERTARGET), mRenderTargetSerial(RenderbufferStorage::issueSerial())
{
IDirect3DTexture9 *surfaceTexture = swapchain->getOffscreenTexture();
mTexture = surfaceTexture;
}
TextureStorage2D::TextureStorage2D(int levels, GLenum internalformat, GLenum usage, bool forceRenderable, GLsizei width, GLsizei height)
: TextureStorage(GetTextureUsage(ConvertTextureInternalFormat(internalformat), usage, forceRenderable)),
TextureStorage2D::TextureStorage2D(rx::Renderer *renderer, int levels, GLenum internalformat, GLenum usage, bool forceRenderable, GLsizei width, GLsizei height)
: TextureStorage(renderer, GetTextureUsage(ConvertTextureInternalFormat(internalformat), usage, forceRenderable)),
mRenderTargetSerial(RenderbufferStorage::issueSerial())
{
mTexture = NULL;
......@@ -312,8 +313,8 @@ unsigned int TextureStorage2D::getRenderTargetSerial(GLenum target) const
return mRenderTargetSerial;
}
TextureStorageCubeMap::TextureStorageCubeMap(int levels, GLenum internalformat, GLenum usage, bool forceRenderable, int size)
: TextureStorage(GetTextureUsage(ConvertTextureInternalFormat(internalformat), usage, forceRenderable)),
TextureStorageCubeMap::TextureStorageCubeMap(rx::Renderer *renderer, int levels, GLenum internalformat, GLenum usage, bool forceRenderable, int size)
: TextureStorage(renderer, GetTextureUsage(ConvertTextureInternalFormat(internalformat), usage, forceRenderable)),
mFirstRenderTargetSerial(RenderbufferStorage::issueCubeSerials())
{
mTexture = NULL;
......
......@@ -19,6 +19,7 @@
namespace rx
{
class Renderer;
class SwapChain;
}
......@@ -29,7 +30,7 @@ class Blit;
class TextureStorage
{
public:
explicit TextureStorage(DWORD usage);
TextureStorage(rx::Renderer *renderer, DWORD usage);
virtual ~TextureStorage();
......@@ -59,6 +60,8 @@ class TextureStorage
const DWORD mD3DUsage;
const D3DPOOL mD3DPool;
rx::Renderer *mRenderer;
const unsigned int mTextureSerial;
static unsigned int issueTextureSerial();
......@@ -68,8 +71,8 @@ class TextureStorage
class TextureStorage2D : public TextureStorage
{
public:
explicit TextureStorage2D(rx::SwapChain *swapchain);
TextureStorage2D(int levels, GLenum internalformat, GLenum usage, bool forceRenderable, GLsizei width, GLsizei height);
explicit TextureStorage2D(rx::Renderer *renderer, rx::SwapChain *swapchain);
TextureStorage2D(rx::Renderer *renderer, int levels, GLenum internalformat, GLenum usage, bool forceRenderable, GLsizei width, GLsizei height);
virtual ~TextureStorage2D();
......@@ -91,7 +94,7 @@ class TextureStorage2D : public TextureStorage
class TextureStorageCubeMap : public TextureStorage
{
public:
TextureStorageCubeMap(int levels, GLenum internalformat, GLenum usage, bool forceRenderable, int size);
TextureStorageCubeMap(rx::Renderer *renderer, int levels, GLenum internalformat, GLenum usage, bool forceRenderable, int size);
virtual ~TextureStorageCubeMap();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment