Merge pull request #55 from c4games/fix-issue53

fix #53
This commit is contained in:
HALX99 2020-02-14 18:12:31 +08:00 committed by GitHub
commit 363dab75c9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 19 additions and 3 deletions

View File

@ -112,7 +112,7 @@ std::string Configuration::getInfo() const
void Configuration::gatherGPUInfo() void Configuration::gatherGPUInfo()
{ {
auto _deviceInfo = backend::Device::getInstance()->getDeviceInfo(); auto _deviceInfo = backend::Device::getInstance()->getDeviceInfo();
CCLOG("weichao %s",_deviceInfo->getExtension()); CCLOG("Supported extensions: %s",_deviceInfo->getExtension());
_valueDict["vendor"] = Value(_deviceInfo->getVendor()); _valueDict["vendor"] = Value(_deviceInfo->getVendor());
_valueDict["renderer"] = Value(_deviceInfo->getRenderer()); _valueDict["renderer"] = Value(_deviceInfo->getRenderer());

View File

@ -278,6 +278,8 @@ bool Texture2D::updateWithImage(Image* image, backend::PixelFormat format, int i
case PixelFormat::PVRTC2: case PixelFormat::PVRTC2:
case PixelFormat::A8: case PixelFormat::A8:
case PixelFormat::ETC: case PixelFormat::ETC:
case PixelFormat::ASTC4:
case PixelFormat::ASTC8:
renderFormat = imagePixelFormat; renderFormat = imagePixelFormat;
default: default:
break; break;
@ -324,6 +326,14 @@ bool Texture2D::updateWithImage(Image* image, backend::PixelFormat format, int i
} }
else if (image->isCompressed()) else if (image->isCompressed())
{ {
switch (imagePixelFormat) {
case PixelFormat::ASTC4:
case PixelFormat::ASTC8:
case PixelFormat::ETC:
renderFormat = imagePixelFormat;
default:;
}
if (renderFormat != image->getPixelFormat()) if (renderFormat != image->getPixelFormat())
{ {
CCLOG("cocos2d: WARNING: This image is compressed and we can't convert it for now"); CCLOG("cocos2d: WARNING: This image is compressed and we can't convert it for now");

View File

@ -85,7 +85,7 @@ Texture2DGL::Texture2DGL(const TextureDescriptor& descriptor) : Texture2DBackend
// Listen this event to restored texture id after coming to foreground on Android. // Listen this event to restored texture id after coming to foreground on Android.
_backToForegroundListener = EventListenerCustom::create(EVENT_RENDERER_RECREATED, [this](EventCustom*){ _backToForegroundListener = EventListenerCustom::create(EVENT_RENDERER_RECREATED, [this](EventCustom*){
glGenTextures(1, &(this->_textureInfo.textures[0])); glGenTextures(1, &(this->_textureInfo.textures[0]));
this->initWithZeros(); // this->initWithZeros();
}); });
Director::getInstance()->getEventDispatcher()->addEventListenerWithFixedPriority(_backToForegroundListener, -1); Director::getInstance()->getEventDispatcher()->addEventListenerWithFixedPriority(_backToForegroundListener, -1);
#endif #endif
@ -116,7 +116,8 @@ void Texture2DGL::updateTextureDescriptor(const cocos2d::backend::TextureDescrip
// Update data here because `updateData()` may not be invoked later. // Update data here because `updateData()` may not be invoked later.
// For example, a texture used as depth buffer will not invoke updateData(). // For example, a texture used as depth buffer will not invoke updateData().
initWithZeros(); // FIXME, Don't call, now it's unused, when the texture is compressed, initWithZeros will cause GL Error: 0x501
// initWithZeros();
} }
Texture2DGL::~Texture2DGL() Texture2DGL::~Texture2DGL()
@ -157,6 +158,8 @@ void Texture2DGL::updateSamplerDescriptor(const SamplerDescriptor &sampler, int
void Texture2DGL::updateData(uint8_t* data, std::size_t width , std::size_t height, std::size_t level, int index) void Texture2DGL::updateData(uint8_t* data, std::size_t width , std::size_t height, std::size_t level, int index)
{ {
CHECK_GL_ERROR_DEBUG();
//Set the row align only when mipmapsNum == 1 and the data is uncompressed //Set the row align only when mipmapsNum == 1 and the data is uncompressed
auto mipmapEnalbed = isMipmapEnabled(_textureInfo.minFilterGL) || isMipmapEnabled(_textureInfo.magFilterGL); auto mipmapEnalbed = isMipmapEnabled(_textureInfo.minFilterGL) || isMipmapEnabled(_textureInfo.magFilterGL);
if(!mipmapEnalbed) if(!mipmapEnalbed)
@ -192,6 +195,7 @@ void Texture2DGL::updateData(uint8_t* data, std::size_t width , std::size_t heig
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, _textureInfo.sAddressModeGL); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, _textureInfo.sAddressModeGL);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, _textureInfo.tAddressModeGL); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, _textureInfo.tAddressModeGL);
CHECK_GL_ERROR_DEBUG();
glTexImage2D(GL_TEXTURE_2D, glTexImage2D(GL_TEXTURE_2D,
level, level,

View File

@ -259,6 +259,7 @@ void UtilsGL::toGLTypes(PixelFormat textureFormat, GLint &internalFormat, GLuint
internalFormat = GL_COMPRESSED_RGBA_ASTC_4x4_KHR; internalFormat = GL_COMPRESSED_RGBA_ASTC_4x4_KHR;
format = 0xFFFFFFFF; format = 0xFFFFFFFF;
type = 0xFFFFFFFF; type = 0xFFFFFFFF;
isCompressed = true;
break; break;
#endif #endif
#ifdef GL_COMPRESSED_RGBA_ASTC_8x8_KHR #ifdef GL_COMPRESSED_RGBA_ASTC_8x8_KHR
@ -266,6 +267,7 @@ void UtilsGL::toGLTypes(PixelFormat textureFormat, GLint &internalFormat, GLuint
internalFormat = GL_COMPRESSED_RGBA_ASTC_8x8_KHR; internalFormat = GL_COMPRESSED_RGBA_ASTC_8x8_KHR;
format = 0xFFFFFFFF; format = 0xFFFFFFFF;
type = 0xFFFFFFFF; type = 0xFFFFFFFF;
isCompressed = true;
break; break;
#endif #endif
#ifdef GL_ETC1_RGB8_OES #ifdef GL_ETC1_RGB8_OES