mirror of https://github.com/axmolengine/axmol.git
Merge branch 'vfs-support' of https://github.com/rh101/engine-x into vfs-support
This commit is contained in:
commit
cd0c5bfcee
|
@ -26,7 +26,7 @@
|
|||
|
||||
# build engine library and all tests
|
||||
|
||||
cmake_minimum_required(VERSION 3.6)
|
||||
cmake_minimum_required(VERSION 3.10)
|
||||
|
||||
project(engine-x)
|
||||
|
||||
|
|
3
LICENSE
3
LICENSE
|
@ -6,7 +6,8 @@ Copyright (c) 2011 Zynga Inc.
|
|||
Copyright (c) 2013-2016 Chukong Technologies Inc.
|
||||
Copyright (c) 2017-2018 Xiamen Yaji Software
|
||||
Copyright (c) 2019-2020 HALX99
|
||||
Copyright (c) 2020 c4games.com
|
||||
Copyright (c) 2020 C4games Ltd.
|
||||
Copyright (c) 2021 Bytedance Inc.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
|
|
23
README.md
23
README.md
|
@ -42,7 +42,7 @@
|
|||
### [Roadmap](issues/1)
|
||||
|
||||
### Quick Start
|
||||
Open [Wiki](https://github.com/c4games/engine-x/wiki) for additional information too.
|
||||
Open [Wiki](https://github.com/c4games/engine-x-wiki) for additional information too.
|
||||
|
||||
#### Common Requirement [Python](https://www.python.org/downloads/)
|
||||
* Python-2.7.17+, Python-3.7+
|
||||
|
@ -76,21 +76,18 @@ Open [Wiki](https://github.com/c4games/engine-x/wiki) for additional information
|
|||
1. Ensure xcode11+ & [cmake3.14+](https://github.com/Kitware/CMake/releases) installed, install cmake command line support: ```sudo "/Applications/CMake.app/Contents/bin/cmake-gui" --install```
|
||||
2. Execute follow command
|
||||
```sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer```
|
||||
3. Generate xcode project
|
||||
```sh
|
||||
# for any device
|
||||
cmake -S . -B build -GXcode -DCMAKE_TOOLCHAIN_FILE=cmake/ios.mini.cmake
|
||||
3. Generate xcode project
|
||||
- for any device
|
||||
```cmake -S . -B build -GXcode -DCMAKE_TOOLCHAIN_FILE=cmake/ios.mini.cmake```
|
||||
- for arm64:
|
||||
```cmake -S . -B build -GXcode -DCMAKE_TOOLCHAIN_FILE=cmake/ios.mini.cmake -DCMAKE_OSX_ARCHITECTURES=arm64```
|
||||
- for simulator x86_64:
|
||||
```cmake -S . -B build -GXcode -DCMAKE_TOOLCHAIN_FILE=cmake/ios.mini.cmake -DCMAKE_OSX_SYSROOT=iphonesimulator -DCMAKE_OSX_ARCHITECTURES=x86_64```
|
||||
|
||||
# for device combined armv7,arm64
|
||||
# cmake -S . -B build -GXcode -DCMAKE_TOOLCHAIN_FILE=cmake/ios.mini.cmake "-DCMAKE_OSX_ARCHITECTURES=armv7;arm64"
|
||||
|
||||
# for simulator x86_64
|
||||
# cmake -S . -B build -GXcode -DCMAKE_TOOLCHAIN_FILE=cmake/ios.mini.cmake -DCMAKE_OSX_SYSROOT=iphonesimulator -DCMAKE_OSX_ARCHITECTURES=x86_64
|
||||
```
|
||||
4. After cmake generate finish, you can open xcode project at ```build``` folder and run cpp-tests or other test targets.
|
||||
5. Notes
|
||||
- **The code sign required to run ios app on device, just change bundle identifier until the auto manage signing solved**
|
||||
- **engine-x only provide armv7, arm64, x86_64 prebuilt libraries for ios**
|
||||
- **The code sign required to run ios app on device, just change bundle identifier until the auto manage signing solved**
|
||||
- **engine-x only provide armv7, arm64, x86_64 prebuilt libraries for ios**
|
||||
|
||||
### Notes
|
||||
* ThreadLocalStorage (TLS)
|
||||
|
|
19
README_CN.md
19
README_CN.md
|
@ -54,7 +54,7 @@
|
|||
|
||||
#### Windows
|
||||
1. 安装CMake,要求3.14以上
|
||||
2. 确保Visual Studio 2019以正确安装
|
||||
2. 确保 Visual Studio 2019 已正确安装
|
||||
3. 执行下面的命令
|
||||
```bat
|
||||
cd engine-x
|
||||
|
@ -79,17 +79,14 @@
|
|||
1. 确保已安装xcode11+和[cmake3.14+](https://github.com/Kitware/CMake/releases), 安装CMake命令行支持: ```sudo "/Applications/CMake.app/Contents/bin/cmake-gui" --install```
|
||||
2. 执行如下命令确保cmake能成功生成xcode工程:
|
||||
```sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer```
|
||||
3. 生成xcode工程, 进入engine-x根目录执行如下命令:
|
||||
```sh
|
||||
# for device arm64
|
||||
cmake -S . -B build -GXcode -DCMAKE_TOOLCHAIN_FILE=cmake/ios.mini.cmake
|
||||
3. 生成xcode工程, 进入engine-x根目录执行如下命令之一:
|
||||
- for any device:
|
||||
```cmake -S . -B build -GXcode -DCMAKE_TOOLCHAIN_FILE=cmake/ios.mini.cmake```
|
||||
- for arm64:
|
||||
```cmake -S . -B build -GXcode -DCMAKE_TOOLCHAIN_FILE=cmake/ios.mini.cmake -DCMAKE_OSX_ARCHITECTURES=arm64```
|
||||
- for simulator x86_64:
|
||||
```cmake -S . -B build -GXcode -DCMAKE_TOOLCHAIN_FILE=cmake/ios.mini.cmake -DCMAKE_OSX_SYSROOT=iphonesimulator -DCMAKE_OSX_ARCHITECTURES=x86_64```
|
||||
|
||||
# for device combined armv7,arm64
|
||||
# cmake -S . -B build -GXcode -DCMAKE_TOOLCHAIN_FILE=cmake/ios.mini.cmake "-DCMAKE_OSX_ARCHITECTURES=armv7;arm64"
|
||||
|
||||
# for simulator x86_64
|
||||
# cmake -S . -B build -GXcode -DCMAKE_TOOLCHAIN_FILE=cmake/ios.mini.cmake -DCMAKE_OSX_SYSROOT=iphonesimulator -DCMAKE_OSX_ARCHITECTURES=x86_64
|
||||
```
|
||||
4. 之后就可以用xcode打开, 选择cpp-tests编译运行
|
||||
|
||||
### 注意
|
||||
|
|
|
@ -103,9 +103,13 @@ function(use_cocos2dx_compile_define target)
|
|||
if(APPLE)
|
||||
target_compile_definitions(${target} PUBLIC __APPLE__)
|
||||
target_compile_definitions(${target} PUBLIC USE_FILE32API)
|
||||
if(IOS AND CC_FORCE_USE_GLES)
|
||||
target_compile_definitions(${target} PUBLIC CC_FORCE_USE_GLES=1)
|
||||
if(CC_COMPAT_GL)
|
||||
target_compile_definitions(${target}
|
||||
PUBLIC CC_COMPAT_GL=1
|
||||
PUBLIC GL_SILENCE_DEPRECATION=1
|
||||
)
|
||||
endif()
|
||||
|
||||
elseif(LINUX)
|
||||
target_compile_definitions(${target} PUBLIC LINUX)
|
||||
target_compile_definitions(${target} PUBLIC _GNU_SOURCE)
|
||||
|
@ -113,8 +117,8 @@ function(use_cocos2dx_compile_define target)
|
|||
target_compile_definitions(${target} PUBLIC ANDROID)
|
||||
target_compile_definitions(${target} PUBLIC USE_FILE32API)
|
||||
elseif(WINDOWS)
|
||||
if(CC_FORCE_USE_GLES)
|
||||
target_compile_definitions(${target} PUBLIC CC_FORCE_USE_GLES=1)
|
||||
if(CC_COMPAT_GL)
|
||||
target_compile_definitions(${target} PUBLIC CC_COMPAT_GL=1)
|
||||
endif()
|
||||
target_compile_definitions(${target}
|
||||
PUBLIC WIN32
|
||||
|
|
|
@ -81,6 +81,8 @@ macro(cocos2dx_depend)
|
|||
find_library(CORE_GRAPHICS_LIBRARY CoreGraphics)
|
||||
find_library(AV_FOUNDATION_LIBRARY AVFoundation)
|
||||
find_library(WEBKIT_LIBRARY WebKit)
|
||||
find_library(ZLIB z)
|
||||
find_library(ICONVLIB iconv)
|
||||
list(APPEND PLATFORM_SPECIFIC_LIBS
|
||||
${UIKIT_LIBRARY}
|
||||
${OPENGLES_LIBRARY}
|
||||
|
@ -93,8 +95,8 @@ macro(cocos2dx_depend)
|
|||
${AV_FOUNDATION_LIBRARY}
|
||||
${WEBKIT_LIBRARY}
|
||||
${COCOS_APPLE_LIBS}
|
||||
"/usr/lib/libz.dylib"
|
||||
"/usr/lib/libiconv.dylib"
|
||||
${ZLIB}
|
||||
${ICONVLIB}
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
|
|
|
@ -8,9 +8,9 @@ CMake is an open-source, cross-platform family of tools designed to build, test
|
|||
```sh
|
||||
cmake --version
|
||||
```
|
||||
if the CMake version is lower than 3.6, please upgrade.
|
||||
if the CMake version is lower than 3.14, please upgrade.
|
||||
|
||||
2. You should use __out-of-source__ builds, this means you need to create a different directory than __cocos-re__ to execute the `cmake` command.
|
||||
2. You should use **out-of-source** builds, this means you need to create a different directory than **engine-x** to execute the `cmake` command.
|
||||
|
||||
## Step by Step
|
||||
|
||||
|
@ -29,33 +29,29 @@ Execute `make help` to see all build targets, `make <target>` build specified ta
|
|||
|
||||
```sh
|
||||
cd engine-x
|
||||
mkdir win32-build && cd win32-build
|
||||
cmake .. -G"Visual Studio 16 2019"
|
||||
mkdir win32-build
|
||||
cmake -B win32-build -G"Visual Studio 16 2019"
|
||||
# build
|
||||
cmake --build win32-build --config Debug
|
||||
```
|
||||
|
||||
Execute `cmake --build .` to compile,
|
||||
```
|
||||
cmake --build . --config Debug
|
||||
cmake --build . --config Release
|
||||
```
|
||||
or open __cocos-re.sln__ in Explorer to use the generated project.
|
||||
or open **engine-x.sln** in Explorer to use the generated project.
|
||||
|
||||
### Generate macOS Project
|
||||
|
||||
```sh
|
||||
cd engine-x
|
||||
mkdir mac-build && cd mac-build
|
||||
cmake .. -GXcode
|
||||
open engine-x.xcodeproj
|
||||
mkdir mac-build
|
||||
cmake -B mac-build -GXcode
|
||||
open mac-build/engine-x.xcodeproj
|
||||
```
|
||||
|
||||
### Generate iOS Project
|
||||
|
||||
```sh
|
||||
cd engine-x
|
||||
mkdir ios-build && cd ios-build
|
||||
cmake .. -GXcode -DCMAKE_TOOLCHAIN_FILE=cmake/ios.mini.cmake
|
||||
open engine-x.xcodeproj
|
||||
mkdir ios-build
|
||||
cmake -B ios-build -GXcode -DCMAKE_TOOLCHAIN_FILE=cmake/ios.mini.cmake
|
||||
open ios-build/engine-x.xcodeproj
|
||||
```
|
||||
|
||||
#### How do I customize the generated Xcode project?
|
||||
|
|
|
@ -77,13 +77,13 @@ if __name__ == "__main__":
|
|||
parser.add_argument("-m", dest="mode", default=None)
|
||||
(args, unkonw) = parser.parse_known_args(sys.argv)
|
||||
|
||||
need_compile = True
|
||||
need_compile = False
|
||||
# if args.luajit:
|
||||
# print(" luajit mode '%s'" % (args.mode))
|
||||
|
||||
if args.mode == "Debug" and args.luajit:
|
||||
need_compile = False
|
||||
print(" -Skip luacompile in debug mode!")
|
||||
# if args.mode == "Debug" and args.luajit:
|
||||
# need_compile = False
|
||||
# print(" -Skip luacompile in debug mode!")
|
||||
|
||||
|
||||
create_files = 0
|
||||
|
|
|
@ -62,7 +62,7 @@ AtlasNode * AtlasNode::create(const std::string& tile, int tileWidth, int tileHe
|
|||
bool AtlasNode::initWithTileFile(const std::string& tile, int tileWidth, int tileHeight, int itemsToRender)
|
||||
{
|
||||
CCASSERT(!tile.empty(), "file size should not be empty");
|
||||
Texture2D *texture = Director::getInstance()->getTextureCache()->addImage(tile);
|
||||
Texture2D *texture = _director->getTextureCache()->addImage(tile);
|
||||
return initWithTexture(texture, tileWidth, tileHeight, itemsToRender);
|
||||
}
|
||||
|
||||
|
@ -162,7 +162,7 @@ void AtlasNode::draw(Renderer *renderer, const Mat4 &transform, uint32_t flags)
|
|||
|
||||
auto programState = _quadCommand.getPipelineDescriptor().programState;
|
||||
|
||||
const auto& projectionMat = Director::getInstance()->getMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION);
|
||||
const auto& projectionMat = _director->getMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION);
|
||||
programState->setUniform(_mvpMatrixLocation, projectionMat.m, sizeof(projectionMat.m));
|
||||
|
||||
_quadCommand.init(_globalZOrder, _textureAtlas->getTexture(), _blendFunc, _textureAtlas->getQuads(), _quadsToDraw, transform, flags);
|
||||
|
|
|
@ -187,9 +187,9 @@ void Camera::setAdditionalProjection(const Mat4& mat)
|
|||
|
||||
bool Camera::initDefault()
|
||||
{
|
||||
auto size = Director::getInstance()->getWinSize();
|
||||
auto size = _director->getWinSize();
|
||||
//create default camera
|
||||
auto projection = Director::getInstance()->getProjection();
|
||||
auto projection = _director->getProjection();
|
||||
switch (projection)
|
||||
{
|
||||
case Director::Projection::_2D:
|
||||
|
@ -201,7 +201,7 @@ bool Camera::initDefault()
|
|||
}
|
||||
case Director::Projection::_3D:
|
||||
{
|
||||
float zeye = Director::getInstance()->getZEye();
|
||||
float zeye = _director->getZEye();
|
||||
initPerspective(60, (float)size.width / size.height, 10, zeye + size.height / 2.0f);
|
||||
Vec3 eye(size.width/2, size.height/2.0f, zeye), center(size.width/2, size.height/2, 0.0f), up(0.0f, 1.0f, 0.0f);
|
||||
setPosition3D(eye);
|
||||
|
@ -247,7 +247,7 @@ Vec2 Camera::project(const Vec3& src) const
|
|||
{
|
||||
Vec2 screenPos;
|
||||
|
||||
auto viewport = Director::getInstance()->getWinSize();
|
||||
auto viewport = _director->getWinSize();
|
||||
Vec4 clipPos;
|
||||
getViewProjectionMatrix().transformVector(Vec4(src.x, src.y, src.z, 1.0f), &clipPos);
|
||||
|
||||
|
@ -264,7 +264,7 @@ Vec2 Camera::projectGL(const Vec3& src) const
|
|||
{
|
||||
Vec2 screenPos;
|
||||
|
||||
auto viewport = Director::getInstance()->getWinSize();
|
||||
auto viewport = _director->getWinSize();
|
||||
Vec4 clipPos;
|
||||
getViewProjectionMatrix().transformVector(Vec4(src.x, src.y, src.z, 1.0f), &clipPos);
|
||||
|
||||
|
@ -280,14 +280,14 @@ Vec2 Camera::projectGL(const Vec3& src) const
|
|||
Vec3 Camera::unproject(const Vec3& src) const
|
||||
{
|
||||
Vec3 dst;
|
||||
unproject(Director::getInstance()->getWinSize(), &src, &dst);
|
||||
unproject(_director->getWinSize(), &src, &dst);
|
||||
return dst;
|
||||
}
|
||||
|
||||
Vec3 Camera::unprojectGL(const Vec3& src) const
|
||||
{
|
||||
Vec3 dst;
|
||||
unprojectGL(Director::getInstance()->getWinSize(), &src, &dst);
|
||||
unprojectGL(_director->getWinSize(), &src, &dst);
|
||||
return dst;
|
||||
}
|
||||
|
||||
|
@ -427,7 +427,7 @@ void Camera::apply()
|
|||
|
||||
void Camera::applyViewport()
|
||||
{
|
||||
Director::getInstance()->getRenderer()->setViewPort(_defaultViewport.x, _defaultViewport.y, _defaultViewport.w, _defaultViewport.h);
|
||||
_director->getRenderer()->setViewPort(_defaultViewport.x, _defaultViewport.y, _defaultViewport.w, _defaultViewport.h);
|
||||
}
|
||||
|
||||
int Camera::getRenderOrder() const
|
||||
|
|
|
@ -146,10 +146,9 @@ void ClippingNode::visit(Renderer *renderer, const Mat4 &parentTransform, uint32
|
|||
// IMPORTANT:
|
||||
// To ease the migration to v3.0, we still support the Mat4 stack,
|
||||
// but it is deprecated and your code should not rely on it
|
||||
Director* director = Director::getInstance();
|
||||
CCASSERT(nullptr != director, "Director is null when setting matrix stack");
|
||||
director->pushMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW);
|
||||
director->loadMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW, _modelViewTransform);
|
||||
CCASSERT(nullptr != _director, "Director is null when setting matrix stack");
|
||||
_director->pushMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW);
|
||||
_director->loadMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW, _modelViewTransform);
|
||||
|
||||
//Add group command
|
||||
|
||||
|
@ -225,7 +224,7 @@ void ClippingNode::visit(Renderer *renderer, const Mat4 &parentTransform, uint32
|
|||
|
||||
renderer->popGroup();
|
||||
|
||||
director->popMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW);
|
||||
_director->popMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW);
|
||||
}
|
||||
|
||||
void ClippingNode::setCameraMask(unsigned short mask, bool applyChildren)
|
||||
|
|
|
@ -62,7 +62,7 @@ void ClippingRectangleNode::onBeforeVisitScissor()
|
|||
{
|
||||
if (_clippingEnabled)
|
||||
{
|
||||
auto renderer = Director::getInstance()->getRenderer();
|
||||
auto renderer = _director->getRenderer();
|
||||
_oldScissorTest = renderer->getScissorTest();
|
||||
renderer->setScissorTest(true);
|
||||
|
||||
|
@ -76,7 +76,7 @@ void ClippingRectangleNode::onBeforeVisitScissor()
|
|||
}
|
||||
|
||||
const Point pos = convertToWorldSpace(Point(_clippingRegion.origin.x, _clippingRegion.origin.y));
|
||||
GLView* glView = Director::getInstance()->getOpenGLView();
|
||||
GLView* glView = _director->getOpenGLView();
|
||||
glView->setScissorInPoints(pos.x,
|
||||
pos.y,
|
||||
_clippingRegion.size.width * scaleX,
|
||||
|
@ -87,7 +87,7 @@ void ClippingRectangleNode::onBeforeVisitScissor()
|
|||
void ClippingRectangleNode::onAfterVisitScissor()
|
||||
{
|
||||
if (_clippingEnabled)
|
||||
Director::getInstance()->getRenderer()->setScissorTest(_oldScissorTest);
|
||||
_director->getRenderer()->setScissorTest(_oldScissorTest);
|
||||
}
|
||||
|
||||
void ClippingRectangleNode::visit(Renderer *renderer, const Mat4 &parentTransform, uint32_t parentFlags)
|
||||
|
|
|
@ -74,7 +74,7 @@ bool FastTMXLayer::initWithTilesetInfo(TMXTilesetInfo *tilesetInfo, TMXLayerInfo
|
|||
|
||||
if( tilesetInfo )
|
||||
{
|
||||
_texture = Director::getInstance()->getTextureCache()->addImage(tilesetInfo->_sourceImage);
|
||||
_texture = _director->getTextureCache()->addImage(tilesetInfo->_sourceImage);
|
||||
_texture->retain();
|
||||
}
|
||||
|
||||
|
@ -135,7 +135,7 @@ void FastTMXLayer::draw(Renderer *renderer, const Mat4& transform, uint32_t flag
|
|||
|
||||
if( flags != 0 || _dirty || _quadsDirty)
|
||||
{
|
||||
Size s = Director::getInstance()->getVisibleSize();
|
||||
Size s = _director->getVisibleSize();
|
||||
const Vec2 &anchor = getAnchorPoint();
|
||||
auto rect = Rect(Camera::getVisitingCamera()->getPositionX() - s.width * (anchor.x == 0.0f ? 0.5f : anchor.x),
|
||||
Camera::getVisitingCamera()->getPositionY() - s.height * (anchor.y == 0.0f ? 0.5f : anchor.y),
|
||||
|
@ -153,7 +153,7 @@ void FastTMXLayer::draw(Renderer *renderer, const Mat4& transform, uint32_t flag
|
|||
_dirty = false;
|
||||
}
|
||||
|
||||
const auto& projectionMat = Director::getInstance()->getMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION);
|
||||
const auto& projectionMat = _director->getMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION);
|
||||
Mat4 finalMat = projectionMat * _modelViewTransform;
|
||||
for (const auto& e : _customCommands)
|
||||
{
|
||||
|
@ -168,7 +168,7 @@ void FastTMXLayer::draw(Renderer *renderer, const Mat4& transform, uint32_t flag
|
|||
|
||||
void FastTMXLayer::updateTiles(const Rect& culledRect)
|
||||
{
|
||||
Rect visibleTiles = Rect(culledRect.origin, culledRect.size * Director::getInstance()->getContentScaleFactor());
|
||||
Rect visibleTiles = Rect(culledRect.origin, culledRect.size * _director->getContentScaleFactor());
|
||||
Size mapTileSize = CC_SIZE_PIXELS_TO_POINTS(_mapTileSize);
|
||||
Size tileSize = CC_SIZE_PIXELS_TO_POINTS(_tileSet->_tileSize);
|
||||
Mat4 nodeToTileTransform = _tileToNodeTransform.getInversed();
|
||||
|
@ -300,7 +300,7 @@ void FastTMXLayer::setupTiles()
|
|||
// Parse cocos2d properties
|
||||
this->parseInternalProperties();
|
||||
|
||||
Size screenSize = Director::getInstance()->getWinSize();
|
||||
auto& screenSize = _director->getWinSize();
|
||||
|
||||
switch (_layerOrientation)
|
||||
{
|
||||
|
|
|
@ -1736,7 +1736,7 @@ void Label::updateEffectUniforms(BatchCommand &batch, TextureAtlas* textureAtlas
|
|||
{
|
||||
updateBuffer(textureAtlas, batch.textCommand);
|
||||
|
||||
auto & matrixProjection = Director::getInstance()->getMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION);
|
||||
auto & matrixProjection = _director->getMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION);
|
||||
|
||||
if (_shadowEnabled) {
|
||||
updateBuffer(textureAtlas, batch.shadowCommand);
|
||||
|
@ -1859,7 +1859,7 @@ void Label::draw(Renderer *renderer, const Mat4 &transform, uint32_t flags)
|
|||
if (_insideBounds)
|
||||
#endif
|
||||
{
|
||||
cocos2d::Mat4 matrixProjection = Director::getInstance()->getMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION);
|
||||
cocos2d::Mat4 matrixProjection = _director->getMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION);
|
||||
if (!_shadowEnabled && (_currentLabelType == LabelType::BMFONT || _currentLabelType == LabelType::CHARMAP))
|
||||
{
|
||||
updateBlendState();
|
||||
|
|
|
@ -56,7 +56,7 @@ LabelAtlas* LabelAtlas::create(const std::string& string, const std::string& cha
|
|||
|
||||
bool LabelAtlas::initWithString(const std::string& string, const std::string& charMapFile, int itemWidth, int itemHeight, int startCharMap)
|
||||
{
|
||||
Texture2D *texture = Director::getInstance()->getTextureCache()->addImage(charMapFile);
|
||||
Texture2D *texture = _director->getTextureCache()->addImage(charMapFile);
|
||||
return initWithString(string, texture, itemWidth, itemHeight, startCharMap);
|
||||
}
|
||||
|
||||
|
|
|
@ -73,8 +73,7 @@ Layer::~Layer()
|
|||
|
||||
bool Layer::init()
|
||||
{
|
||||
Director * director = Director::getInstance();
|
||||
setContentSize(director->getWinSize());
|
||||
setContentSize(_director->getWinSize());
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -332,7 +331,7 @@ LayerColor * LayerColor::create(const Color4B& color)
|
|||
|
||||
bool LayerColor::init()
|
||||
{
|
||||
Size s = Director::getInstance()->getWinSize();
|
||||
Size s = _director->getWinSize();
|
||||
return initWithColor(Color4B(0,0,0,0), s.width, s.height);
|
||||
}
|
||||
|
||||
|
@ -365,7 +364,7 @@ bool LayerColor::initWithColor(const Color4B& color, float w, float h)
|
|||
|
||||
bool LayerColor::initWithColor(const Color4B& color)
|
||||
{
|
||||
Size s = Director::getInstance()->getWinSize();
|
||||
Size s = _director->getWinSize();
|
||||
return initWithColor(color, s.width, s.height);
|
||||
}
|
||||
|
||||
|
@ -411,7 +410,7 @@ void LayerColor::draw(Renderer *renderer, const Mat4 &transform, uint32_t flags)
|
|||
_customCommand.init(_globalZOrder, _blendFunc);
|
||||
renderer->addCommand(&_customCommand);
|
||||
|
||||
cocos2d::Mat4 projectionMat = Director::getInstance()->getMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION);
|
||||
cocos2d::Mat4 projectionMat = _director->getMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION);
|
||||
auto& pipelineDescriptor = _customCommand.getPipelineDescriptor();
|
||||
pipelineDescriptor.programState->setUniform(_mvpMatrixLocation, projectionMat.m, sizeof(projectionMat.m));
|
||||
|
||||
|
@ -722,7 +721,7 @@ void LayerRadialGradient::draw(Renderer *renderer, const Mat4 &transform, uint32
|
|||
_customCommand.init(_globalZOrder, _blendFunc);
|
||||
renderer->addCommand(&_customCommand);
|
||||
|
||||
const auto& projectionMat = Director::getInstance()->getMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION);
|
||||
const auto& projectionMat = _director->getMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION);
|
||||
auto programState = _customCommand.getPipelineDescriptor().programState;
|
||||
Mat4 finalMat = projectionMat * transform;
|
||||
programState->setUniform(_mvpMatrixLocation, finalMat.m, sizeof(finalMat.m));
|
||||
|
|
|
@ -119,7 +119,7 @@ bool Menu::initWithArray(const Vector<MenuItem*>& arrayOfItems)
|
|||
{
|
||||
_enabled = true;
|
||||
// menu in the center of the screen
|
||||
Size s = Director::getInstance()->getWinSize();
|
||||
Size s = _director->getWinSize();
|
||||
|
||||
this->setIgnoreAnchorPointForPosition(true);
|
||||
setAnchorPoint(Vec2(0.5f, 0.5f));
|
||||
|
|
|
@ -82,7 +82,7 @@ bool MotionStreak::initWithFade(float fade, float minSeg, float stroke, const Co
|
|||
{
|
||||
CCASSERT(!path.empty(), "Invalid filename");
|
||||
|
||||
Texture2D *texture = Director::getInstance()->getTextureCache()->addImage(path);
|
||||
Texture2D *texture = _director->getTextureCache()->addImage(path);
|
||||
return initWithFade(fade, minSeg, stroke, color, texture);
|
||||
}
|
||||
|
||||
|
@ -101,7 +101,7 @@ bool MotionStreak::initWithFade(float fade, float minSeg, float stroke, const Co
|
|||
_stroke = stroke;
|
||||
_fadeDelta = 1.0f / fade;
|
||||
|
||||
double fps = 1 / Director::getInstance()->getAnimationInterval();
|
||||
double fps = 1 / _director->getAnimationInterval();
|
||||
_maxPoints = (int)(fade * fps) + 2;
|
||||
|
||||
_pointState = (float *)malloc(sizeof(float) * _maxPoints);
|
||||
|
@ -409,7 +409,7 @@ void MotionStreak::draw(Renderer *renderer, const Mat4 &transform, uint32_t flag
|
|||
|
||||
auto programState = _customCommand.getPipelineDescriptor().programState;
|
||||
|
||||
const auto& projectionMat = Director::getInstance()->getMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION);
|
||||
const auto& projectionMat = _director->getMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION);
|
||||
Mat4 finalMat = projectionMat * transform;
|
||||
programState->setUniform(_mvpMatrixLocaiton, finalMat.m, sizeof(Mat4));
|
||||
|
||||
|
|
|
@ -110,16 +110,13 @@ void NodeGrid::visit(Renderer *renderer, const Mat4 &parentTransform, uint32_t p
|
|||
// IMPORTANT:
|
||||
// To ease the migration to v3.0, we still support the Mat4 stack,
|
||||
// but it is deprecated and your code should not rely on it
|
||||
Director* director = Director::getInstance();
|
||||
CCASSERT(nullptr != director, "Director is null when setting matrix stack");
|
||||
|
||||
director->pushMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW);
|
||||
director->loadMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW, _modelViewTransform);
|
||||
_director->pushMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW);
|
||||
_director->loadMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW, _modelViewTransform);
|
||||
|
||||
Director::Projection beforeProjectionType = Director::Projection::DEFAULT;
|
||||
if(_nodeGrid && _nodeGrid->isActive())
|
||||
{
|
||||
beforeProjectionType = Director::getInstance()->getProjection();
|
||||
beforeProjectionType = _director->getProjection();
|
||||
_nodeGrid->set2DProjection();
|
||||
}
|
||||
|
||||
|
@ -166,12 +163,12 @@ void NodeGrid::visit(Renderer *renderer, const Mat4 &parentTransform, uint32_t p
|
|||
if(_nodeGrid && _nodeGrid->isActive())
|
||||
{
|
||||
// restore projection
|
||||
director->setProjection(beforeProjectionType);
|
||||
_director->setProjection(beforeProjectionType);
|
||||
}
|
||||
|
||||
onGridEndDraw();
|
||||
|
||||
director->popMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW);
|
||||
_director->popMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW);
|
||||
}
|
||||
|
||||
void NodeGrid::setGrid(GridBase *grid)
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
* Copyright (c) 2011 Marco Tillemans
|
||||
* Copyright (c) 2013-2016 Chukong Technologies Inc.
|
||||
* Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.
|
||||
* Copyright (c) 2020-2021 C4games.com.
|
||||
*
|
||||
* http://www.cocos2d-x.org
|
||||
*
|
||||
|
@ -123,6 +124,8 @@ bool ParticleBatchNode::initWithTexture(Texture2D *tex, int capacity)
|
|||
{
|
||||
_textureAtlas = new (std::nothrow) TextureAtlas();
|
||||
_textureAtlas->initWithTexture(tex, capacity);
|
||||
|
||||
updateProgramStateTexture();
|
||||
|
||||
_children.reserve(capacity);
|
||||
|
||||
|
@ -136,7 +139,7 @@ bool ParticleBatchNode::initWithTexture(Texture2D *tex, int capacity)
|
|||
*/
|
||||
bool ParticleBatchNode::initWithFile(const std::string& fileImage, int capacity)
|
||||
{
|
||||
Texture2D *tex = Director::getInstance()->getTextureCache()->addImage(fileImage);
|
||||
Texture2D *tex = _director->getTextureCache()->addImage(fileImage);
|
||||
return initWithTexture(tex, capacity);
|
||||
}
|
||||
|
||||
|
@ -165,13 +168,12 @@ void ParticleBatchNode::visit(Renderer *renderer, const Mat4 &parentTransform, u
|
|||
// IMPORTANT:d
|
||||
// To ease the migration to v3.0, we still support the Mat4 stack,
|
||||
// but it is deprecated and your code should not rely on it
|
||||
Director* director = Director::getInstance();
|
||||
director->pushMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW);
|
||||
director->loadMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW, _modelViewTransform);
|
||||
_director->pushMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW);
|
||||
_director->loadMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW, _modelViewTransform);
|
||||
|
||||
draw(renderer, _modelViewTransform, flags);
|
||||
|
||||
director->popMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW);
|
||||
_director->popMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -439,11 +441,10 @@ void ParticleBatchNode::draw(Renderer* renderer, const Mat4 & transform, uint32_
|
|||
_customCommand.init(_globalZOrder, _blendFunc);
|
||||
|
||||
// Texture is set in TextureAtlas.
|
||||
const cocos2d::Mat4& projectionMat = Director::getInstance()->getMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION);
|
||||
const cocos2d::Mat4& projectionMat = _director->getMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION);
|
||||
Mat4 finalMat = projectionMat * transform;
|
||||
auto programState = _customCommand.getPipelineDescriptor().programState;
|
||||
programState->setUniform(_mvpMatrixLocaiton, finalMat.m, sizeof(finalMat.m));
|
||||
|
||||
if (_textureAtlas->isDirty())
|
||||
{
|
||||
const auto& quads = _textureAtlas->getQuads();
|
||||
|
@ -532,15 +533,19 @@ void ParticleBatchNode::updateBlendFunc()
|
|||
void ParticleBatchNode::setTexture(Texture2D* texture)
|
||||
{
|
||||
_textureAtlas->setTexture(texture);
|
||||
if (texture) {
|
||||
auto programState = _customCommand.getPipelineDescriptor().programState;
|
||||
programState->setTexture(_textureAtlas->getTexture()->getBackendTexture());
|
||||
// If the new texture has No premultiplied alpha, AND the blendFunc hasn't been changed, then update it
|
||||
if (!texture->hasPremultipliedAlpha() && (_blendFunc.src == CC_BLEND_SRC && _blendFunc.dst == CC_BLEND_DST))
|
||||
{
|
||||
_blendFunc = BlendFunc::ALPHA_NON_PREMULTIPLIED;
|
||||
}
|
||||
}
|
||||
updateProgramStateTexture();
|
||||
}
|
||||
|
||||
void ParticleBatchNode::updateProgramStateTexture()
|
||||
{
|
||||
auto texture = _textureAtlas->getTexture();
|
||||
if (!texture)
|
||||
return;
|
||||
auto programState = _customCommand.getPipelineDescriptor().programState;
|
||||
programState->setTexture(texture->getBackendTexture());
|
||||
// If the new texture has No premultiplied alpha, AND the blendFunc hasn't been changed, then update it
|
||||
if (!texture->hasPremultipliedAlpha() && (_blendFunc.src == CC_BLEND_SRC && _blendFunc.dst == CC_BLEND_DST))
|
||||
_blendFunc = BlendFunc::ALPHA_NON_PREMULTIPLIED;
|
||||
}
|
||||
|
||||
Texture2D* ParticleBatchNode::getTexture() const
|
||||
|
|
|
@ -170,6 +170,9 @@ private:
|
|||
int addChildHelper(ParticleSystem* child, int z, int aTag, const std::string &name, bool setTag);
|
||||
void addChildByTagOrName(ParticleSystem* child, int z, int tag, const std::string &name, bool setTag);
|
||||
void updateBlendFunc();
|
||||
|
||||
void updateProgramStateTexture();
|
||||
|
||||
/** the texture atlas used for drawing the quads */
|
||||
TextureAtlas* _textureAtlas = nullptr;
|
||||
|
||||
|
|
|
@ -113,7 +113,7 @@ bool ParticleFire::initWithTotalParticles(int numberOfParticles)
|
|||
_angleVar = 10;
|
||||
|
||||
// emitter position
|
||||
Size winSize = Director::getInstance()->getWinSize();
|
||||
Size winSize = _director->getWinSize();
|
||||
this->setPosition(winSize.width/2.0f, 60.0f);
|
||||
this->_posVar.set(40.0f, 20.0f);
|
||||
|
||||
|
@ -214,7 +214,7 @@ bool ParticleFireworks::initWithTotalParticles(int numberOfParticles)
|
|||
this->modeA.speedVar = 50.0f;
|
||||
|
||||
// emitter position
|
||||
Size winSize = Director::getInstance()->getWinSize();
|
||||
Size winSize = _director->getWinSize();
|
||||
this->setPosition(winSize.width/2, winSize.height/2);
|
||||
|
||||
// angle
|
||||
|
@ -323,7 +323,7 @@ bool ParticleSun::initWithTotalParticles(int numberOfParticles)
|
|||
_angleVar = 360;
|
||||
|
||||
// emitter position
|
||||
Size winSize = Director::getInstance()->getWinSize();
|
||||
Size winSize = _director->getWinSize();
|
||||
this->setPosition(winSize.width/2, winSize.height/2);
|
||||
setPosVar(Vec2::ZERO);
|
||||
|
||||
|
@ -430,7 +430,7 @@ bool ParticleGalaxy::initWithTotalParticles(int numberOfParticles)
|
|||
_angleVar = 360;
|
||||
|
||||
// emitter position
|
||||
Size winSize = Director::getInstance()->getWinSize();
|
||||
Size winSize = _director->getWinSize();
|
||||
this->setPosition(winSize.width/2, winSize.height/2);
|
||||
setPosVar(Vec2::ZERO);
|
||||
|
||||
|
@ -539,7 +539,7 @@ bool ParticleFlower::initWithTotalParticles(int numberOfParticles)
|
|||
_angleVar = 360;
|
||||
|
||||
// emitter position
|
||||
Size winSize = Director::getInstance()->getWinSize();
|
||||
Size winSize = _director->getWinSize();
|
||||
this->setPosition(winSize.width/2, winSize.height/2);
|
||||
setPosVar(Vec2::ZERO);
|
||||
|
||||
|
@ -647,7 +647,7 @@ bool ParticleMeteor::initWithTotalParticles(int numberOfParticles)
|
|||
_angleVar = 360;
|
||||
|
||||
// emitter position
|
||||
Size winSize = Director::getInstance()->getWinSize();
|
||||
Size winSize = _director->getWinSize();
|
||||
this->setPosition(winSize.width/2, winSize.height/2);
|
||||
setPosVar(Vec2::ZERO);
|
||||
|
||||
|
@ -756,7 +756,7 @@ bool ParticleSpiral::initWithTotalParticles(int numberOfParticles)
|
|||
_angleVar = 0;
|
||||
|
||||
// emitter position
|
||||
Size winSize = Director::getInstance()->getWinSize();
|
||||
Size winSize = _director->getWinSize();
|
||||
this->setPosition(winSize.width/2, winSize.height/2);
|
||||
setPosVar(Vec2::ZERO);
|
||||
|
||||
|
@ -864,7 +864,7 @@ bool ParticleExplosion::initWithTotalParticles(int numberOfParticles)
|
|||
_angleVar = 360;
|
||||
|
||||
// emitter position
|
||||
Size winSize = Director::getInstance()->getWinSize();
|
||||
Size winSize = _director->getWinSize();
|
||||
this->setPosition(winSize.width/2, winSize.height/2);
|
||||
setPosVar(Vec2::ZERO);
|
||||
|
||||
|
@ -969,7 +969,7 @@ bool ParticleSmoke::initWithTotalParticles(int numberOfParticles)
|
|||
_angleVar = 5;
|
||||
|
||||
// emitter position
|
||||
Size winSize = Director::getInstance()->getWinSize();
|
||||
Size winSize = _director->getWinSize();
|
||||
this->setPosition(winSize.width/2, 0);
|
||||
setPosVar(Vec2(20, 0));
|
||||
|
||||
|
@ -1074,7 +1074,7 @@ bool ParticleSnow::initWithTotalParticles(int numberOfParticles)
|
|||
setTangentialAccelVar(1);
|
||||
|
||||
// emitter position
|
||||
Size winSize = Director::getInstance()->getWinSize();
|
||||
Size winSize = _director->getWinSize();
|
||||
this->setPosition(winSize.width/2, winSize.height + 10);
|
||||
setPosVar(Vec2(winSize.width/2, 0.0f));
|
||||
|
||||
|
@ -1186,7 +1186,7 @@ bool ParticleRain::initWithTotalParticles(int numberOfParticles)
|
|||
|
||||
|
||||
// emitter position
|
||||
Size winSize = Director::getInstance()->getWinSize();
|
||||
Size winSize = _director->getWinSize();
|
||||
this->setPosition(winSize.width/2, winSize.height);
|
||||
setPosVar(Vec2(winSize.width/2, 0.0f));
|
||||
|
||||
|
|
|
@ -500,7 +500,7 @@ bool ParticleSystem::initWithDictionary(ValueMap& dictionary, const std::string&
|
|||
// set not pop-up message box when load image failed
|
||||
bool notify = FileUtils::getInstance()->isPopupNotify();
|
||||
FileUtils::getInstance()->setPopupNotify(false);
|
||||
tex = Director::getInstance()->getTextureCache()->addImage(textureName);
|
||||
tex = _director->getTextureCache()->addImage(textureName);
|
||||
// reset the value of UIImage notify
|
||||
FileUtils::getInstance()->setPopupNotify(notify);
|
||||
}
|
||||
|
@ -533,7 +533,7 @@ bool ParticleSystem::initWithDictionary(ValueMap& dictionary, const std::string&
|
|||
CCASSERT(isOK, "CCParticleSystem: error init image with Data");
|
||||
CC_BREAK_IF(!isOK);
|
||||
|
||||
setTexture(Director::getInstance()->getTextureCache()->addImage(image, _plistFile + textureName));
|
||||
setTexture(_director->getTextureCache()->addImage(image, _plistFile + textureName));
|
||||
|
||||
image->release();
|
||||
}
|
||||
|
|
|
@ -453,7 +453,7 @@ void ParticleSystemQuad::draw(Renderer *renderer, const Mat4 &transform, uint32_
|
|||
{
|
||||
auto programState = _quadCommand.getPipelineDescriptor().programState;
|
||||
|
||||
cocos2d::Mat4 projectionMat = Director::getInstance()->getMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION);
|
||||
cocos2d::Mat4 projectionMat = _director->getMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION);
|
||||
programState->setUniform(_mvpMatrixLocaiton, projectionMat.m, sizeof(projectionMat.m));
|
||||
|
||||
_quadCommand.init(_globalZOrder, _texture, _blendFunc, _quads, _particleCount, transform, flags);
|
||||
|
|
|
@ -569,7 +569,7 @@ void ProgressTimer::draw(Renderer *renderer, const Mat4 &transform, uint32_t fla
|
|||
if( _vertexData.empty() || ! _sprite)
|
||||
return;
|
||||
|
||||
const cocos2d::Mat4& projectionMat = Director::getInstance()->getMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION);
|
||||
const cocos2d::Mat4& projectionMat = _director->getMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION);
|
||||
Mat4 finalMat = projectionMat * transform;
|
||||
_programState->setUniform(_locMVP1, finalMat.m, sizeof(finalMat.m));
|
||||
_programState->setTexture(_locTex1, 0, _sprite->getTexture()->getBackendTexture());
|
||||
|
|
|
@ -272,10 +272,8 @@ void ProtectedNode::visit(Renderer* renderer, const Mat4 &parentTransform, uint3
|
|||
// IMPORTANT:
|
||||
// To ease the migration to v3.0, we still support the Mat4 stack,
|
||||
// but it is deprecated and your code should not rely on it
|
||||
Director* director = Director::getInstance();
|
||||
CCASSERT(nullptr != director, "Director is null when setting matrix stack");
|
||||
director->pushMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW);
|
||||
director->loadMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW, _modelViewTransform);
|
||||
_director->pushMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW);
|
||||
_director->loadMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW, _modelViewTransform);
|
||||
|
||||
int i = 0; // used by _children
|
||||
int j = 0; // used by _protectedChildren
|
||||
|
@ -325,7 +323,7 @@ void ProtectedNode::visit(Renderer* renderer, const Mat4 &parentTransform, uint3
|
|||
// Please refer to https://github.com/cocos2d/cocos2d-x/pull/6920
|
||||
// setOrderOfArrival(0);
|
||||
|
||||
director->popMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW);
|
||||
_director->popMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW);
|
||||
}
|
||||
|
||||
void ProtectedNode::onEnter()
|
||||
|
|
|
@ -484,7 +484,7 @@ void RenderTexture::draw(Renderer *renderer, const Mat4 &transform, uint32_t fla
|
|||
begin();
|
||||
|
||||
//clear screen
|
||||
Director::getInstance()->getRenderer()->clear(_clearFlags, _clearColor, _clearDepth, _clearStencil, _globalZOrder);
|
||||
_director->getRenderer()->clear(_clearFlags, _clearColor, _clearDepth, _clearStencil, _globalZOrder);
|
||||
|
||||
//! make sure all children are drawn
|
||||
sortAllChildren();
|
||||
|
@ -502,27 +502,25 @@ void RenderTexture::draw(Renderer *renderer, const Mat4 &transform, uint32_t fla
|
|||
|
||||
void RenderTexture::onBegin()
|
||||
{
|
||||
Director *director = Director::getInstance();
|
||||
_oldProjMatrix = _director->getMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION);
|
||||
_director->loadMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION, _projectionMatrix);
|
||||
|
||||
_oldProjMatrix = director->getMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION);
|
||||
director->loadMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION, _projectionMatrix);
|
||||
|
||||
_oldTransMatrix = director->getMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW);
|
||||
director->loadMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW, _transformMatrix);
|
||||
_oldTransMatrix = _director->getMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW);
|
||||
_director->loadMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW, _transformMatrix);
|
||||
|
||||
if(!_keepMatrix)
|
||||
{
|
||||
director->setProjection(director->getProjection());
|
||||
_director->setProjection(_director->getProjection());
|
||||
const Size& texSize = _texture2D->getContentSizeInPixels();
|
||||
|
||||
// Calculate the adjustment ratios based on the old and new projections
|
||||
Size size = director->getWinSizeInPixels();
|
||||
Size size = _director->getWinSizeInPixels();
|
||||
float widthRatio = size.width / texSize.width;
|
||||
float heightRatio = size.height / texSize.height;
|
||||
|
||||
Mat4 orthoMatrix;
|
||||
Mat4::createOrthographicOffCenter((float)-1.0 / widthRatio, (float)1.0 / widthRatio, (float)-1.0 / heightRatio, (float)1.0 / heightRatio, -1, 1, &orthoMatrix);
|
||||
director->multiplyMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION, orthoMatrix);
|
||||
_director->multiplyMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION, orthoMatrix);
|
||||
}
|
||||
|
||||
Rect viewport;
|
||||
|
@ -533,7 +531,7 @@ void RenderTexture::onBegin()
|
|||
viewport.origin.x = (_fullRect.origin.x - _rtTextureRect.origin.x) * viewPortRectWidthRatio;
|
||||
viewport.origin.y = (_fullRect.origin.y - _rtTextureRect.origin.y) * viewPortRectHeightRatio;
|
||||
|
||||
Renderer *renderer = director->getRenderer();
|
||||
Renderer *renderer = _director->getRenderer();
|
||||
|
||||
_oldViewport = renderer->getViewport();
|
||||
renderer->setViewPort(viewport.origin.x, viewport.origin.y, viewport.size.width, viewport.size.height);
|
||||
|
@ -544,11 +542,10 @@ void RenderTexture::onBegin()
|
|||
|
||||
void RenderTexture::onEnd()
|
||||
{
|
||||
Director *director = Director::getInstance();
|
||||
director->loadMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION, _oldProjMatrix);
|
||||
director->loadMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW, _oldTransMatrix);
|
||||
_director->loadMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION, _oldProjMatrix);
|
||||
_director->loadMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW, _oldTransMatrix);
|
||||
|
||||
Renderer *renderer = Director::getInstance()->getRenderer();
|
||||
Renderer *renderer = _director->getRenderer();
|
||||
renderer->setViewPort(_oldViewport.x, _oldViewport.y, _oldViewport.w, _oldViewport.h);
|
||||
|
||||
renderer->setRenderTarget(_oldRenderTarget);
|
||||
|
@ -615,7 +612,7 @@ void RenderTexture::setClearFlags(ClearFlag clearFlags)
|
|||
|
||||
void RenderTexture::clearColorAttachment()
|
||||
{
|
||||
auto renderer = Director::getInstance()->getRenderer();
|
||||
auto renderer = _director->getRenderer();
|
||||
_beforeClearAttachmentCommand.func = [=]() -> void {
|
||||
_oldRenderTarget = renderer->getRenderTarget();
|
||||
renderer->setRenderTarget(_renderTarget);
|
||||
|
|
|
@ -51,7 +51,7 @@ NS_CC_BEGIN
|
|||
|
||||
Scene::Scene()
|
||||
: _defaultCamera(Camera::create())
|
||||
, _event(Director::getInstance()->getEventDispatcher()->addCustomEventListener(Director::EVENT_PROJECTION_CHANGED, std::bind(&Scene::onProjectionChanged, this, std::placeholders::_1)))
|
||||
, _event(_director->getEventDispatcher()->addCustomEventListener(Director::EVENT_PROJECTION_CHANGED, std::bind(&Scene::onProjectionChanged, this, std::placeholders::_1)))
|
||||
{
|
||||
_ignoreAnchorPointForPosition = true;
|
||||
setAnchorPoint(Vec2(0.5f, 0.5f));
|
||||
|
@ -74,7 +74,7 @@ Scene::~Scene()
|
|||
#if CC_USE_NAVMESH
|
||||
CC_SAFE_RELEASE(_navMesh);
|
||||
#endif
|
||||
Director::getInstance()->getEventDispatcher()->removeEventListener(_event);
|
||||
_director->getEventDispatcher()->removeEventListener(_event);
|
||||
CC_SAFE_RELEASE(_event);
|
||||
|
||||
#if CC_USE_PHYSICS
|
||||
|
@ -104,7 +104,7 @@ void Scene::setNavMesh(NavMesh* navMesh)
|
|||
|
||||
bool Scene::init()
|
||||
{
|
||||
auto size = Director::getInstance()->getWinSize();
|
||||
auto size = _director->getWinSize();
|
||||
return initWithSize(size);
|
||||
}
|
||||
|
||||
|
@ -174,7 +174,6 @@ const std::vector<Camera*>& Scene::getCameras()
|
|||
|
||||
void Scene::render(Renderer* renderer, const Mat4& eyeTransform, const Mat4* eyeProjection)
|
||||
{
|
||||
auto director = Director::getInstance();
|
||||
Camera* defaultCamera = nullptr;
|
||||
const auto& transform = getNodeToParentTransform();
|
||||
|
||||
|
@ -200,8 +199,8 @@ void Scene::render(Renderer* renderer, const Mat4& eyeTransform, const Mat4* eye
|
|||
camera->setAdditionalProjection(*eyeProjection * camera->getProjectionMatrix().getInversed());
|
||||
|
||||
camera->setAdditionalTransform(eyeTransform.getInversed());
|
||||
director->pushMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION);
|
||||
director->loadMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION, Camera::_visitingCamera->getViewProjectionMatrix());
|
||||
_director->pushMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION);
|
||||
_director->loadMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION, Camera::_visitingCamera->getViewProjectionMatrix());
|
||||
|
||||
camera->apply();
|
||||
//clear background with max depth
|
||||
|
@ -217,7 +216,7 @@ void Scene::render(Renderer* renderer, const Mat4& eyeTransform, const Mat4* eye
|
|||
|
||||
renderer->render();
|
||||
|
||||
director->popMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION);
|
||||
_director->popMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION);
|
||||
|
||||
// we shouldn't restore the transform matrix since it could be used
|
||||
// from "update" or other parts of the game to calculate culling or something else.
|
||||
|
@ -233,8 +232,8 @@ void Scene::render(Renderer* renderer, const Mat4& eyeTransform, const Mat4* eye
|
|||
physics3dDebugCamera->setAdditionalProjection(*eyeProjection * physics3dDebugCamera->getProjectionMatrix().getInversed());
|
||||
|
||||
physics3dDebugCamera->setAdditionalTransform(eyeTransform.getInversed());
|
||||
director->pushMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION);
|
||||
director->loadMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION, physics3dDebugCamera->getViewProjectionMatrix());
|
||||
_director->pushMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION);
|
||||
_director->loadMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION, physics3dDebugCamera->getViewProjectionMatrix());
|
||||
|
||||
physics3dDebugCamera->apply();
|
||||
physics3dDebugCamera->clearBackground();
|
||||
|
@ -242,7 +241,7 @@ void Scene::render(Renderer* renderer, const Mat4& eyeTransform, const Mat4* eye
|
|||
_physics3DWorld->debugDraw(renderer);
|
||||
renderer->render();
|
||||
|
||||
director->popMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION);
|
||||
_director->popMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -308,10 +307,7 @@ bool Scene::initWithPhysics()
|
|||
bool ret = false;
|
||||
do
|
||||
{
|
||||
Director * director;
|
||||
CC_BREAK_IF( ! (director = Director::getInstance()) );
|
||||
|
||||
this->setContentSize(director->getWinSize());
|
||||
this->setContentSize(_director->getWinSize());
|
||||
|
||||
#if CC_USE_3D_PHYSICS && CC_ENABLE_BULLET_INTEGRATION
|
||||
Physics3DWorldDes info;
|
||||
|
|
|
@ -336,7 +336,7 @@ static unsigned char cc_2x2_white_image[] = {
|
|||
// MARK: texture
|
||||
void Sprite::setTexture(const std::string &filename)
|
||||
{
|
||||
Texture2D *texture = Director::getInstance()->getTextureCache()->addImage(filename);
|
||||
Texture2D *texture = _director->getTextureCache()->addImage(filename);
|
||||
setTexture(texture);
|
||||
_unflippedOffsetPositionFromCenter = Vec2::ZERO;
|
||||
Rect rect = Rect::ZERO;
|
||||
|
@ -1716,7 +1716,7 @@ void Sprite::setPolygonInfo(const PolygonInfo& info)
|
|||
|
||||
void Sprite::setMVPMatrixUniform()
|
||||
{
|
||||
const auto& projectionMat = Director::getInstance()->getMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION);
|
||||
const auto& projectionMat = _director->getMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION);
|
||||
auto programState = _trianglesCommand.getPipelineDescriptor().programState;
|
||||
if (programState && _mvpMatrixLocation)
|
||||
programState->setUniform(_mvpMatrixLocation, projectionMat.m, sizeof(projectionMat.m));
|
||||
|
|
|
@ -174,7 +174,7 @@ bool SpriteBatchNode::init()
|
|||
*/
|
||||
bool SpriteBatchNode::initWithFile(const std::string& fileImage, ssize_t capacity/* = DEFAULT_CAPACITY*/)
|
||||
{
|
||||
Texture2D *texture2D = Director::getInstance()->getTextureCache()->addImage(fileImage);
|
||||
Texture2D *texture2D = _director->getTextureCache()->addImage(fileImage);
|
||||
return initWithTexture(texture2D, capacity);
|
||||
}
|
||||
|
||||
|
@ -435,7 +435,7 @@ void SpriteBatchNode::draw(Renderer *renderer, const Mat4 &transform, uint32_t f
|
|||
child->updateTransform();
|
||||
}
|
||||
|
||||
const auto& matrixProjection = Director::getInstance()->getMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION);
|
||||
const auto& matrixProjection = _director->getMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION);
|
||||
auto programState = _quadCommand.getPipelineDescriptor().programState;
|
||||
programState->setUniform(_mvpMatrixLocaiton, matrixProjection.m, sizeof(matrixProjection.m));
|
||||
_quadCommand.init(_globalZOrder, _textureAtlas->getTexture(), _blendFunc, _textureAtlas->getQuads(), _textureAtlas->getTotalQuads(), transform, flags);
|
||||
|
|
|
@ -196,7 +196,7 @@ bool TextFieldTTF::attachWithIME()
|
|||
if (ret)
|
||||
{
|
||||
// open keyboard
|
||||
auto pGlView = Director::getInstance()->getOpenGLView();
|
||||
auto pGlView = _director->getOpenGLView();
|
||||
if (pGlView)
|
||||
{
|
||||
pGlView->setIMEKeyboardState(true);
|
||||
|
@ -211,7 +211,7 @@ bool TextFieldTTF::detachWithIME()
|
|||
if (ret)
|
||||
{
|
||||
// close keyboard
|
||||
auto glView = Director::getInstance()->getOpenGLView();
|
||||
auto glView = _director->getOpenGLView();
|
||||
if (glView)
|
||||
{
|
||||
glView->setIMEKeyboardState(false);
|
||||
|
|
|
@ -88,7 +88,7 @@ bool TransitionScene::initWithDuration(float t, Scene *scene)
|
|||
#endif // CC_ENABLE_GC_FOR_NATIVE_OBJECTS
|
||||
_inScene = scene;
|
||||
_inScene->retain();
|
||||
_outScene = Director::getInstance()->getRunningScene();
|
||||
_outScene = _director->getRunningScene();
|
||||
if (_outScene == nullptr)
|
||||
{
|
||||
_outScene = Scene::create();
|
||||
|
@ -152,10 +152,9 @@ void TransitionScene::setNewScene(float /*dt*/)
|
|||
this->unschedule(CC_SCHEDULE_SELECTOR(TransitionScene::setNewScene));
|
||||
|
||||
// Before replacing, save the "send cleanup to scene"
|
||||
Director *director = Director::getInstance();
|
||||
_isSendCleanupToScene = director->isSendCleanupToScene();
|
||||
_isSendCleanupToScene = _director->isSendCleanupToScene();
|
||||
|
||||
director->replaceScene(_inScene);
|
||||
_director->replaceScene(_inScene);
|
||||
#if CC_ENABLE_GC_FOR_NATIVE_OBJECTS
|
||||
auto sEngine = ScriptEngineManager::getInstance()->getScriptEngine();
|
||||
if (sEngine)
|
||||
|
@ -329,7 +328,7 @@ TransitionJumpZoom* TransitionJumpZoom::create(float t, Scene* scene)
|
|||
void TransitionJumpZoom::onEnter()
|
||||
{
|
||||
TransitionScene::onEnter();
|
||||
Size s = Director::getInstance()->getWinSize();
|
||||
Size s = _director->getWinSize();
|
||||
|
||||
_inScene->setScale(0.5f);
|
||||
_inScene->setPosition(s.width, 0);
|
||||
|
@ -412,7 +411,7 @@ ActionInterval* TransitionMoveInL::easeActionWithAction(ActionInterval* action)
|
|||
|
||||
void TransitionMoveInL::initScenes()
|
||||
{
|
||||
Size s = Director::getInstance()->getWinSize();
|
||||
Size s = _director->getWinSize();
|
||||
_inScene->setPosition(-s.width,0);
|
||||
}
|
||||
|
||||
|
@ -440,7 +439,7 @@ TransitionMoveInR* TransitionMoveInR::create(float t, Scene* scene)
|
|||
|
||||
void TransitionMoveInR::initScenes()
|
||||
{
|
||||
Size s = Director::getInstance()->getWinSize();
|
||||
Size s = _director->getWinSize();
|
||||
_inScene->setPosition(s.width,0);
|
||||
}
|
||||
|
||||
|
@ -468,7 +467,7 @@ TransitionMoveInT* TransitionMoveInT::create(float t, Scene* scene)
|
|||
|
||||
void TransitionMoveInT::initScenes()
|
||||
{
|
||||
Size s = Director::getInstance()->getWinSize();
|
||||
Size s = _director->getWinSize();
|
||||
_inScene->setPosition(0,s.height);
|
||||
}
|
||||
|
||||
|
@ -496,7 +495,7 @@ TransitionMoveInB* TransitionMoveInB::create(float t, Scene* scene)
|
|||
|
||||
void TransitionMoveInB::initScenes()
|
||||
{
|
||||
Size s = Director::getInstance()->getWinSize();
|
||||
Size s = _director->getWinSize();
|
||||
_inScene->setPosition(0,-s.height);
|
||||
}
|
||||
|
||||
|
@ -544,13 +543,13 @@ void TransitionSlideInL::sceneOrder()
|
|||
|
||||
void TransitionSlideInL:: initScenes()
|
||||
{
|
||||
Size s = Director::getInstance()->getWinSize();
|
||||
Size s = _director->getWinSize();
|
||||
_inScene->setPosition(-(s.width-ADJUST_FACTOR),0.0f);
|
||||
}
|
||||
|
||||
ActionInterval* TransitionSlideInL::action()
|
||||
{
|
||||
Size s = Director::getInstance()->getWinSize();
|
||||
Size s = _director->getWinSize();
|
||||
return MoveBy::create(_duration, Vec2(s.width-ADJUST_FACTOR,0.0f));
|
||||
}
|
||||
|
||||
|
@ -600,14 +599,14 @@ void TransitionSlideInR::sceneOrder()
|
|||
|
||||
void TransitionSlideInR::initScenes()
|
||||
{
|
||||
Size s = Director::getInstance()->getWinSize();
|
||||
Size s = _director->getWinSize();
|
||||
_inScene->setPosition(s.width-ADJUST_FACTOR,0);
|
||||
}
|
||||
|
||||
|
||||
ActionInterval* TransitionSlideInR:: action()
|
||||
{
|
||||
Size s = Director::getInstance()->getWinSize();
|
||||
Size s = _director->getWinSize();
|
||||
return MoveBy::create(_duration, Vec2(-(s.width-ADJUST_FACTOR),0.0f));
|
||||
}
|
||||
|
||||
|
@ -641,14 +640,14 @@ void TransitionSlideInT::sceneOrder()
|
|||
|
||||
void TransitionSlideInT::initScenes()
|
||||
{
|
||||
Size s = Director::getInstance()->getWinSize();
|
||||
Size s = _director->getWinSize();
|
||||
_inScene->setPosition(0,s.height-ADJUST_FACTOR);
|
||||
}
|
||||
|
||||
|
||||
ActionInterval* TransitionSlideInT::action()
|
||||
{
|
||||
Size s = Director::getInstance()->getWinSize();
|
||||
Size s = _director->getWinSize();
|
||||
return MoveBy::create(_duration, Vec2(0.0f,-(s.height-ADJUST_FACTOR)));
|
||||
}
|
||||
|
||||
|
@ -681,14 +680,14 @@ void TransitionSlideInB::sceneOrder()
|
|||
|
||||
void TransitionSlideInB:: initScenes()
|
||||
{
|
||||
Size s = Director::getInstance()->getWinSize();
|
||||
Size s = _director->getWinSize();
|
||||
_inScene->setPosition(0,-(s.height-ADJUST_FACTOR));
|
||||
}
|
||||
|
||||
|
||||
ActionInterval* TransitionSlideInB:: action()
|
||||
{
|
||||
Size s = Director::getInstance()->getWinSize();
|
||||
Size s = _director->getWinSize();
|
||||
return MoveBy::create(_duration, Vec2(0.0f,s.height-ADJUST_FACTOR));
|
||||
}
|
||||
|
||||
|
@ -1289,7 +1288,7 @@ void TransitionCrossFade::onEnter()
|
|||
// create a transparent color layer
|
||||
// in which we are going to add our rendertextures
|
||||
Color4B color(0,0,0,0);
|
||||
Size size = Director::getInstance()->getWinSize();
|
||||
Size size = _director->getWinSize();
|
||||
LayerColor* layer = LayerColor::create(color);
|
||||
|
||||
// create the first render texture for inScene
|
||||
|
@ -1397,7 +1396,7 @@ void TransitionTurnOffTiles::onEnter()
|
|||
_outSceneProxy->setTarget(_outScene);
|
||||
_outSceneProxy->onEnter();
|
||||
|
||||
Size s = Director::getInstance()->getWinSize();
|
||||
Size s = _director->getWinSize();
|
||||
float aspect = s.width / s.height;
|
||||
int x = (int)(12 * aspect);
|
||||
int y = 12;
|
||||
|
@ -1593,7 +1592,7 @@ void TransitionFadeTR::onEnter()
|
|||
_outSceneProxy->setTarget(_outScene);
|
||||
_outSceneProxy->onEnter();
|
||||
|
||||
Size s = Director::getInstance()->getWinSize();
|
||||
Size s = _director->getWinSize();
|
||||
float aspect = s.width / s.height;
|
||||
int x = (int)(12 * aspect);
|
||||
int y = 12;
|
||||
|
|
|
@ -99,7 +99,7 @@ void TransitionPageTurn::onEnter()
|
|||
_inSceneProxy->onEnter();
|
||||
_outSceneProxy->onEnter();
|
||||
|
||||
Size s = Director::getInstance()->getWinSize();
|
||||
Size s = _director->getWinSize();
|
||||
int x,y;
|
||||
if (s.width > s.height)
|
||||
{
|
||||
|
|
|
@ -69,7 +69,7 @@ void TransitionProgress::onEnter()
|
|||
|
||||
// create a transparent color layer
|
||||
// in which we are going to add our rendertextures
|
||||
Size size = Director::getInstance()->getWinSize();
|
||||
auto& size = _director->getWinSize();
|
||||
|
||||
// create the second render texture for outScene
|
||||
RenderTexture *texture = RenderTexture::create((int)size.width, (int)size.height,backend::PixelFormat::RGBA8, backend::PixelFormat::D24S8);
|
||||
|
@ -134,7 +134,7 @@ ProgressTimer* TransitionProgress::progressTimerNodeWithRenderTexture(RenderText
|
|||
|
||||
ProgressTimer* TransitionProgressRadialCCW::progressTimerNodeWithRenderTexture(RenderTexture* texture)
|
||||
{
|
||||
Size size = Director::getInstance()->getWinSize();
|
||||
auto& size = _director->getWinSize();
|
||||
|
||||
ProgressTimer* node = ProgressTimer::create(texture->getSprite());
|
||||
|
||||
|
@ -178,7 +178,7 @@ TransitionProgressRadialCW* TransitionProgressRadialCW::create(float t, Scene* s
|
|||
|
||||
ProgressTimer* TransitionProgressRadialCW::progressTimerNodeWithRenderTexture(RenderTexture* texture)
|
||||
{
|
||||
Size size = Director::getInstance()->getWinSize();
|
||||
auto& size = _director->getWinSize();
|
||||
|
||||
ProgressTimer* node = ProgressTimer::create(texture->getSprite());
|
||||
|
||||
|
@ -210,7 +210,7 @@ TransitionProgressHorizontal* TransitionProgressHorizontal::create(float t, Scen
|
|||
|
||||
ProgressTimer* TransitionProgressHorizontal::progressTimerNodeWithRenderTexture(RenderTexture* texture)
|
||||
{
|
||||
Size size = Director::getInstance()->getWinSize();
|
||||
auto& size = _director->getWinSize();
|
||||
|
||||
ProgressTimer* node = ProgressTimer::create(texture->getSprite());
|
||||
|
||||
|
@ -243,7 +243,7 @@ TransitionProgressVertical* TransitionProgressVertical::create(float t, Scene* s
|
|||
|
||||
ProgressTimer* TransitionProgressVertical::progressTimerNodeWithRenderTexture(RenderTexture* texture)
|
||||
{
|
||||
Size size = Director::getInstance()->getWinSize();
|
||||
auto& size = _director->getWinSize();
|
||||
|
||||
ProgressTimer* node = ProgressTimer::create(texture->getSprite());
|
||||
|
||||
|
@ -289,7 +289,7 @@ void TransitionProgressInOut::setupTransition()
|
|||
|
||||
ProgressTimer* TransitionProgressInOut::progressTimerNodeWithRenderTexture(RenderTexture* texture)
|
||||
{
|
||||
Size size = Director::getInstance()->getWinSize();
|
||||
auto& size = _director->getWinSize();
|
||||
|
||||
ProgressTimer* node = ProgressTimer::create(texture->getSprite());
|
||||
|
||||
|
@ -323,7 +323,7 @@ TransitionProgressOutIn* TransitionProgressOutIn::create(float t, Scene* scene)
|
|||
|
||||
ProgressTimer* TransitionProgressOutIn::progressTimerNodeWithRenderTexture(RenderTexture* texture)
|
||||
{
|
||||
Size size = Director::getInstance()->getWinSize();
|
||||
auto& size = _director->getWinSize();
|
||||
|
||||
ProgressTimer* node = ProgressTimer::create(texture->getSprite());
|
||||
|
||||
|
|
|
@ -123,9 +123,8 @@ void BillBoard::visit(Renderer *renderer, const Mat4& parentTransform, uint32_t
|
|||
flags |= FLAGS_TRANSFORM_DIRTY;
|
||||
}
|
||||
|
||||
Director* director = Director::getInstance();
|
||||
director->pushMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW);
|
||||
director->loadMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW, _modelViewTransform);
|
||||
_director->pushMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW);
|
||||
_director->loadMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW, _modelViewTransform);
|
||||
|
||||
int i = 0;
|
||||
|
||||
|
@ -154,7 +153,7 @@ void BillBoard::visit(Renderer *renderer, const Mat4& parentTransform, uint32_t
|
|||
this->draw(renderer, _modelViewTransform, flags);
|
||||
}
|
||||
|
||||
director->popMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW);
|
||||
_director->popMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW);
|
||||
}
|
||||
|
||||
bool BillBoard::calculateBillboardTransform()
|
||||
|
|
|
@ -88,7 +88,7 @@ bool MotionStreak3D::initWithFade(float fade, float minSeg, float stroke, const
|
|||
{
|
||||
CCASSERT(!path.empty(), "Invalid filename");
|
||||
|
||||
Texture2D *texture = Director::getInstance()->getTextureCache()->addImage(path);
|
||||
Texture2D *texture = _director->getTextureCache()->addImage(path);
|
||||
return initWithFade(fade, minSeg, stroke, color, texture);
|
||||
}
|
||||
|
||||
|
@ -415,7 +415,7 @@ void MotionStreak3D::draw(Renderer *renderer, const Mat4 &transform, uint32_t fl
|
|||
_afterCommand.init(_globalZOrder);
|
||||
_customCommand.init(_globalZOrder, transform, flags);
|
||||
|
||||
auto pmatrix = Director::getInstance()->getMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION);
|
||||
auto pmatrix = _director->getMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION);
|
||||
auto mvpMatrix = pmatrix * transform;
|
||||
|
||||
_programState->setUniform(_locMVP, mvpMatrix.m, sizeof(mvpMatrix.m));
|
||||
|
@ -435,7 +435,7 @@ void MotionStreak3D::draw(Renderer *renderer, const Mat4 &transform, uint32_t fl
|
|||
|
||||
void MotionStreak3D::onBeforeDraw()
|
||||
{
|
||||
auto *renderer = Director::getInstance()->getRenderer();
|
||||
auto *renderer = _director->getRenderer();
|
||||
_rendererDepthTest = renderer->getDepthTest();
|
||||
_rendererCullface = renderer->getCullMode();
|
||||
|
||||
|
@ -445,7 +445,7 @@ void MotionStreak3D::onBeforeDraw()
|
|||
|
||||
void MotionStreak3D::onAfterDraw()
|
||||
{
|
||||
auto *renderer = Director::getInstance()->getRenderer();
|
||||
auto *renderer = _director->getRenderer();
|
||||
renderer->setDepthTest(_rendererDepthTest);
|
||||
renderer->setCullMode(_rendererCullface);
|
||||
}
|
||||
|
|
|
@ -180,7 +180,7 @@ void Skybox::reload()
|
|||
|
||||
void Skybox::onBeforeDraw()
|
||||
{
|
||||
auto *renderer = Director::getInstance()->getRenderer();
|
||||
auto *renderer = _director->getRenderer();
|
||||
|
||||
_rendererDepthTestEnabled = renderer->getDepthTest();
|
||||
_rendererDepthCmpFunc = renderer->getDepthCompareFunction();
|
||||
|
@ -193,7 +193,7 @@ void Skybox::onBeforeDraw()
|
|||
|
||||
void Skybox::onAfterDraw()
|
||||
{
|
||||
auto *renderer = Director::getInstance()->getRenderer();
|
||||
auto *renderer = _director->getRenderer();
|
||||
renderer->setDepthTest(_rendererDepthTestEnabled);
|
||||
renderer->setDepthCompareFunction(_rendererDepthCmpFunc);
|
||||
renderer->setCullMode(_rendererCullMode);
|
||||
|
|
|
@ -401,7 +401,7 @@ Sprite3D* Sprite3D::createSprite3DNode(NodeData* nodedata,ModelData* modeldata,c
|
|||
textureData = materialData->getTextureData(NTextureData::Usage::Normal);
|
||||
if (textureData)
|
||||
{
|
||||
auto tex = Director::getInstance()->getTextureCache()->addImage(textureData->filename);
|
||||
auto tex = _director->getTextureCache()->addImage(textureData->filename);
|
||||
if(tex)
|
||||
{
|
||||
Texture2D::TexParams texParams;
|
||||
|
@ -566,7 +566,7 @@ void Sprite3D::createNode(NodeData* nodedata, Node* root, const MaterialDatas& m
|
|||
textureData = materialData->getTextureData(NTextureData::Usage::Normal);
|
||||
if (textureData)
|
||||
{
|
||||
auto tex = Director::getInstance()->getTextureCache()->addImage(textureData->filename);
|
||||
auto tex = _director->getTextureCache()->addImage(textureData->filename);
|
||||
if (tex)
|
||||
{
|
||||
Texture2D::TexParams texParams;
|
||||
|
@ -659,7 +659,7 @@ void Sprite3D::addMesh(Mesh* mesh)
|
|||
|
||||
void Sprite3D::setTexture(const std::string& texFile)
|
||||
{
|
||||
auto tex = Director::getInstance()->getTextureCache()->addImage(texFile);
|
||||
auto tex = _director->getTextureCache()->addImage(texFile);
|
||||
setTexture(tex);
|
||||
}
|
||||
|
||||
|
@ -720,9 +720,8 @@ void Sprite3D::visit(cocos2d::Renderer *renderer, const cocos2d::Mat4 &parentTra
|
|||
flags |= FLAGS_RENDER_AS_3D;
|
||||
|
||||
//
|
||||
Director* director = Director::getInstance();
|
||||
director->pushMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW);
|
||||
director->loadMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW, _modelViewTransform);
|
||||
_director->pushMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW);
|
||||
_director->loadMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW, _modelViewTransform);
|
||||
|
||||
bool visibleByCamera = isVisitableByVisitingCamera();
|
||||
|
||||
|
@ -753,7 +752,7 @@ void Sprite3D::visit(cocos2d::Renderer *renderer, const cocos2d::Mat4 &parentTra
|
|||
this->draw(renderer, _modelViewTransform, flags);
|
||||
}
|
||||
|
||||
director->popMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW);
|
||||
_director->popMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW);
|
||||
}
|
||||
|
||||
void Sprite3D::draw(Renderer *renderer, const Mat4 &transform, uint32_t flags)
|
||||
|
|
|
@ -131,7 +131,7 @@ void Terrain::draw(cocos2d::Renderer *renderer, const cocos2d::Mat4 &transform,
|
|||
_quadRoot->preCalculateAABB(_terrainModelMatrix);
|
||||
}
|
||||
|
||||
auto &projectionMatrix = Director::getInstance()->getMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION);
|
||||
auto &projectionMatrix = _director->getMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION);
|
||||
auto finalMatrix = projectionMatrix * transform;
|
||||
_programState->setUniform(_mvpMatrixLocation, &finalMatrix.m, sizeof(finalMatrix.m));
|
||||
|
||||
|
@ -267,7 +267,7 @@ Terrain::Terrain()
|
|||
reload();
|
||||
}
|
||||
);
|
||||
Director::getInstance()->getEventDispatcher()->addEventListenerWithFixedPriority(_backToForegroundListener, 1);
|
||||
_director->getEventDispatcher()->addEventListenerWithFixedPriority(_backToForegroundListener, 1);
|
||||
#endif
|
||||
#ifdef CC_USE_METAL
|
||||
auto image = new (std::nothrow)Image();
|
||||
|
@ -486,7 +486,7 @@ Terrain::~Terrain()
|
|||
}
|
||||
|
||||
#if CC_ENABLE_CACHE_TEXTURE_DATA
|
||||
Director::getInstance()->getEventDispatcher()->removeEventListener(_backToForegroundListener);
|
||||
_director->getEventDispatcher()->removeEventListener(_backToForegroundListener);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
|
@ -65,8 +65,8 @@ if(NOT DEFINED ENGINEX_CORE_LIB)
|
|||
set(ENGINEX_CORE_LIB cocos2d CACHE INTERNAL "The engine-x core lib name" )
|
||||
endif()
|
||||
|
||||
if (NOT DEFINED CC_FORCE_USE_GLES)
|
||||
set(CC_FORCE_USE_GLES FALSE CACHE INTERNAL "Force use GLES" )
|
||||
if (NOT DEFINED CC_COMPAT_GL)
|
||||
set(CC_COMPAT_GL FALSE CACHE INTERNAL "Enabling CC_COMPAT_GL" )
|
||||
endif()
|
||||
|
||||
project(cocos2d_libs)
|
||||
|
@ -151,7 +151,7 @@ set_target_properties(${ENGINEX_CORE_LIB}
|
|||
PROPERTIES
|
||||
ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib"
|
||||
LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib"
|
||||
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib"
|
||||
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin"
|
||||
VERSION "${ENGINEX_VERSION}"
|
||||
FOLDER "Internal"
|
||||
)
|
||||
|
|
|
@ -32,6 +32,7 @@ THE SOFTWARE.
|
|||
|
||||
#include <unordered_map>
|
||||
#include "mio/mio.hpp"
|
||||
#include "yasio/cxx17/string_view.hpp"
|
||||
|
||||
/**
|
||||
* @addtogroup base
|
||||
|
@ -246,7 +247,7 @@ public:
|
|||
** key: 16bytes key
|
||||
** iv: 16bytes iv
|
||||
*/
|
||||
virtual void setEncryptEnabled(bool enabled, const std::string& key, const std::string& iv);
|
||||
virtual void setEncryptEnabled(bool enabled, cxx17::string_view key, cxx17::string_view iv);
|
||||
|
||||
/*
|
||||
* Mark encrypt function as virtual, default use AES cfb128 encrypt/decrypt
|
||||
|
|
|
@ -251,17 +251,17 @@ THE SOFTWARE.
|
|||
#endif
|
||||
|
||||
/** Use physics integration API. */
|
||||
// It works with:
|
||||
// Chipmunk2D or Box2D
|
||||
#ifndef CC_USE_PHYSICS
|
||||
#define CC_USE_PHYSICS 1
|
||||
#endif
|
||||
|
||||
#if (CC_USE_PHYSICS)
|
||||
/** Use chipmunk physics 2d engine. */
|
||||
/** Use Chipmunk2D physics 2d engine on physics integration API. */
|
||||
#ifndef CC_ENABLE_CHIPMUNK_INTEGRATION
|
||||
#define CC_ENABLE_CHIPMUNK_INTEGRATION 0
|
||||
#define CC_ENABLE_CHIPMUNK_INTEGRATION 0
|
||||
#endif
|
||||
|
||||
/** or use box2d physics 2d engine. */
|
||||
/** or use Box2D physics 2d engine on physics integration API. */
|
||||
#ifndef CC_ENABLE_BOX2D_INTEGRATION
|
||||
#define CC_ENABLE_BOX2D_INTEGRATION 1
|
||||
#endif
|
||||
|
|
|
@ -657,6 +657,7 @@ using TextureUsage = backend::TextureUsage;
|
|||
using PixelFormat = backend::PixelFormat;
|
||||
|
||||
using TargetBufferFlags = backend::TargetBufferFlags;
|
||||
using DepthStencilFlags = backend::DepthStencilFlags;
|
||||
using RenderTargetFlag = backend::RenderTargetFlag;
|
||||
using ClearFlag = backend::ClearFlag;
|
||||
|
||||
|
|
|
@ -87,7 +87,12 @@ void captureScreen(std::function<void(RefPtr<Image>)> imageCallback)
|
|||
auto renderer = director->getRenderer();
|
||||
auto eventDispatcher = director->getEventDispatcher();
|
||||
|
||||
// !!!Metal: needs setFrameBufferOnly before draw
|
||||
#if defined(CC_USE_METAL)
|
||||
s_captureScreenListener = eventDispatcher->addCustomEventListener(Director::EVENT_BEFORE_DRAW, [=](EventCustom* /*event*/) {
|
||||
#else
|
||||
s_captureScreenListener = eventDispatcher->addCustomEventListener(Director::EVENT_AFTER_DRAW, [=](EventCustom* /*event*/) {
|
||||
#endif
|
||||
eventDispatcher->removeEventListener(s_captureScreenListener);
|
||||
s_captureScreenListener = nullptr;
|
||||
// !!!GL: AFTER_DRAW and BEFORE_END_FRAME
|
||||
|
|
|
@ -38,6 +38,7 @@
|
|||
#include "platform/CCFileStream.h"
|
||||
#include "md5/md5.h"
|
||||
#include "yasio/xxsocket.hpp"
|
||||
#include <inttypes.h>
|
||||
|
||||
// **NOTE**
|
||||
// In the file:
|
||||
|
@ -366,11 +367,16 @@ namespace cocos2d { namespace network {
|
|||
void run()
|
||||
{
|
||||
lock_guard<mutex> lock(_threadMutex);
|
||||
if (!_thread.joinable())
|
||||
{
|
||||
std::thread newThread(&DownloaderCURL::Impl::_threadProc, this);
|
||||
_thread.swap(newThread);
|
||||
|
||||
if (_tasksFinished)
|
||||
{ // all tasks finished, make sure thread not joinable
|
||||
if (_thread.joinable())
|
||||
_thread.join();
|
||||
_tasksFinished = false;
|
||||
}
|
||||
|
||||
if (!_thread.joinable())
|
||||
_thread = std::thread(&DownloaderCURL::Impl::_threadProc, this);
|
||||
}
|
||||
|
||||
void stop()
|
||||
|
@ -391,12 +397,6 @@ namespace cocos2d { namespace network {
|
|||
_thread.join();
|
||||
}
|
||||
|
||||
bool stoped()
|
||||
{
|
||||
lock_guard<mutex> lock(_threadMutex);
|
||||
return !_thread.joinable();
|
||||
}
|
||||
|
||||
void getProcessTasks(vector<TaskWrapper>& outList)
|
||||
{
|
||||
lock_guard<mutex> lock(_processMutex);
|
||||
|
@ -480,7 +480,7 @@ namespace cocos2d { namespace network {
|
|||
if (coTask->_acceptRanges && coTask->_totalBytesReceived > 0)
|
||||
{
|
||||
char buf[128];
|
||||
sprintf(buf, "%lld-", coTask->_totalBytesReceived);
|
||||
sprintf(buf, "%" PRId64 "-", coTask->_totalBytesReceived);
|
||||
curl_easy_setopt(handle, CURLOPT_RANGE, buf);
|
||||
curl_easy_setopt(handle, CURLOPT_RESUME_FROM_LARGE,(curl_off_t)coTask->_totalBytesReceived);
|
||||
}
|
||||
|
@ -807,11 +807,14 @@ namespace cocos2d { namespace network {
|
|||
}
|
||||
} while (!coTaskMap.empty());
|
||||
|
||||
_tasksFinished = true;
|
||||
|
||||
curl_multi_cleanup(curlmHandle);
|
||||
DLLOG("----DownloaderCURL::Impl::_threadProc end");
|
||||
}
|
||||
|
||||
thread _thread;
|
||||
std::atomic_bool _tasksFinished{};
|
||||
deque<TaskWrapper> _requestQueue;
|
||||
set<TaskWrapper> _processSet;
|
||||
// deque<TaskWrapper> _finishedQueue;
|
||||
|
|
|
@ -31,8 +31,8 @@ THE SOFTWARE.
|
|||
|
||||
#include "base/CCConsole.h"
|
||||
|
||||
//#define CC_DOWNLOADER_DEBUG
|
||||
#ifdef CC_DOWNLOADER_DEBUG
|
||||
// #define CC_DOWNLOADER_DEBUG
|
||||
#if defined(CC_DOWNLOADER_DEBUG) || defined(_DEBUG)
|
||||
#define DLLOG(format, ...) cocos2d::log(format, ##__VA_ARGS__)
|
||||
#else
|
||||
#define DLLOG(...) do {} while (0)
|
||||
|
|
|
@ -36,9 +36,15 @@ THE SOFTWARE.
|
|||
#include "platform/win32/CCGL-win32.h"
|
||||
#elif CC_TARGET_PLATFORM == CC_PLATFORM_LINUX
|
||||
#include "platform/linux/CCGL-linux.h"
|
||||
#elif CC_TARGET_PLATFORM == CC_PLATFORM_IOS && !defined(CC_USE_METAL)
|
||||
#elif CC_TARGET_PLATFORM == CC_PLATFORM_IOS
|
||||
#if CC_COMPAT_GL
|
||||
#include "platform/ios/CCGL-ios.h"
|
||||
#endif
|
||||
#elif CC_TARGET_PLATFORM == CC_PLATFORM_MAC
|
||||
#if CC_COMPAT_GL
|
||||
#include "platform/mac/CCGL-mac.h"
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/// @endcond
|
||||
#endif /* __PLATFORM_CCPLATFORMDEFINE_H__*/
|
||||
|
|
|
@ -103,12 +103,14 @@ THE SOFTWARE.
|
|||
#endif
|
||||
#endif // CC_PLATFORM_WIN32
|
||||
|
||||
/*
|
||||
* Windows: https://github.com/google/angle
|
||||
* iOS: Use Apple GLES
|
||||
/*
|
||||
windows: https://github.com/google/angle
|
||||
mac: GL
|
||||
iOS: GLES
|
||||
other: GL
|
||||
*/
|
||||
#ifndef CC_FORCE_USE_GLES
|
||||
#define CC_FORCE_USE_GLES 0
|
||||
#ifndef CC_COMPAT_GL
|
||||
#define CC_COMPAT_GL 0
|
||||
#endif
|
||||
|
||||
#if ((CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) || (CC_TARGET_PLATFORM == CC_PLATFORM_IOS))
|
||||
|
@ -118,21 +120,27 @@ THE SOFTWARE.
|
|||
#endif
|
||||
|
||||
#if (CC_TARGET_PLATFORM == CC_PLATFORM_MAC)
|
||||
#define CC_USE_METAL
|
||||
#if !CC_COMPAT_GL
|
||||
#define CC_USE_METAL
|
||||
#else
|
||||
#define CC_USE_GL
|
||||
#endif
|
||||
#elif (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
|
||||
#if !CC_FORCE_USE_GLES
|
||||
#if !CC_COMPAT_GL
|
||||
#define CC_USE_METAL
|
||||
#else
|
||||
#define CC_USE_GLES
|
||||
#endif
|
||||
#elif (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
|
||||
#define CC_USE_GLES
|
||||
#else
|
||||
#if !CC_FORCE_USE_GLES
|
||||
#elif (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)
|
||||
#if !CC_COMPAT_GL
|
||||
#define CC_USE_GL
|
||||
#else
|
||||
#define CC_USE_GLES
|
||||
#endif
|
||||
#else
|
||||
#define CC_USE_GL
|
||||
#endif
|
||||
|
||||
/// @endcond
|
||||
|
|
|
@ -1,5 +1,3 @@
|
|||
cmake_minimum_required(VERSION 3.6)
|
||||
|
||||
# need to whole-archive this lib
|
||||
set(target_name cpp_android_spec)
|
||||
|
||||
|
|
|
@ -217,10 +217,10 @@ public abstract class Cocos2dxActivity extends Activity implements Cocos2dxHelpe
|
|||
msg.obj = new Cocos2dxHandler.DialogMessage(pTitle, pMessage);
|
||||
this.mHandler.sendMessage(msg);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void runOnGLThread(final Runnable pRunnable) {
|
||||
this.mGLSurfaceView.queueEvent(pRunnable);
|
||||
|
||||
@Deprecated
|
||||
public void runOnGLThread(final Runnable runnable) {
|
||||
Cocos2dxHelper.runOnGLThread(runnable);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -130,7 +130,7 @@ public class Cocos2dxEditBoxHelper {
|
|||
public void afterTextChanged(final Editable s) {
|
||||
if (!editBox.getChangedTextProgrammatically()) {
|
||||
if ((Boolean) editBox.getTag()) {
|
||||
mCocos2dxActivity.runOnGLThread(new Runnable() {
|
||||
Cocos2dxHelper.runOnGLThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
Cocos2dxEditBoxHelper.__editBoxEditingChanged(index, s.toString());
|
||||
|
@ -152,7 +152,7 @@ public class Cocos2dxEditBoxHelper {
|
|||
editBox.setTag(true);
|
||||
editBox.setChangedTextProgrammatically(false);
|
||||
if (hasFocus) {
|
||||
mCocos2dxActivity.runOnGLThread(new Runnable() {
|
||||
Cocos2dxHelper.runOnGLThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
editBox.endAction = Cocos2dxEditBox.kEndActionUnknown;
|
||||
|
@ -168,7 +168,7 @@ public class Cocos2dxEditBoxHelper {
|
|||
// Note that we must to copy a string to prevent string content is modified
|
||||
// on UI thread while 's.toString' is invoked at the same time.
|
||||
final String text = new String(editBox.getText().toString());
|
||||
mCocos2dxActivity.runOnGLThread(new Runnable() {
|
||||
Cocos2dxHelper.runOnGLThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
int action = editBox.endAction;
|
||||
|
|
|
@ -111,7 +111,7 @@ public class Cocos2dxHelper {
|
|||
// ===========================================================
|
||||
|
||||
public static void runOnGLThread(final Runnable r) {
|
||||
((Cocos2dxActivity)sActivity).runOnGLThread(r);
|
||||
nativeRunOnGLThread(r);
|
||||
}
|
||||
|
||||
private static boolean sInited = false;
|
||||
|
@ -264,6 +264,8 @@ public class Cocos2dxHelper {
|
|||
// Methods
|
||||
// ===========================================================
|
||||
|
||||
private static native void nativeRunOnGLThread(final Object runnable);
|
||||
|
||||
private static native void nativeSetEditTextDialogResult(final byte[] pBytes);
|
||||
|
||||
private static native void nativeSetContext(final Object pContext, final Object pAssetManager);
|
||||
|
@ -394,7 +396,7 @@ public class Cocos2dxHelper {
|
|||
try {
|
||||
final byte[] bytesUTF8 = pResult.getBytes("UTF8");
|
||||
|
||||
Cocos2dxHelper.sCocos2dxHelperListener.runOnGLThread(new Runnable() {
|
||||
Cocos2dxHelper.runOnGLThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
Cocos2dxHelper.nativeSetEditTextDialogResult(bytesUTF8);
|
||||
|
@ -608,8 +610,6 @@ public class Cocos2dxHelper {
|
|||
|
||||
public static interface Cocos2dxHelperListener {
|
||||
public void showDialog(final String pTitle, final String pMessage);
|
||||
|
||||
public void runOnGLThread(final Runnable pRunnable);
|
||||
}
|
||||
|
||||
//Enhance API modification begin
|
||||
|
|
|
@ -33,6 +33,8 @@ import android.webkit.WebView;
|
|||
import android.webkit.WebViewClient;
|
||||
import android.widget.FrameLayout;
|
||||
|
||||
import org.cocos2dx.lib.Cocos2dxHelper;
|
||||
|
||||
import java.lang.reflect.Method;
|
||||
import java.net.URI;
|
||||
import java.util.concurrent.CountDownLatch;
|
||||
|
@ -109,7 +111,7 @@ public class Cocos2dxWebView extends WebView {
|
|||
try {
|
||||
URI uri = URI.create(urlString);
|
||||
if (uri != null && uri.getScheme().equals(mJSScheme)) {
|
||||
activity.runOnGLThread(new Runnable() {
|
||||
Cocos2dxHelper.runOnGLThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
Cocos2dxWebViewHelper._onJsCallback(mViewTag, urlString);
|
||||
|
@ -125,7 +127,7 @@ public class Cocos2dxWebView extends WebView {
|
|||
CountDownLatch latch = new CountDownLatch(1);
|
||||
|
||||
// run worker on cocos thread
|
||||
activity.runOnGLThread(new ShouldStartLoadingWorker(latch, result, mViewTag, urlString));
|
||||
Cocos2dxHelper.runOnGLThread(new ShouldStartLoadingWorker(latch, result, mViewTag, urlString));
|
||||
|
||||
// wait for result from cocos thread
|
||||
try {
|
||||
|
@ -140,8 +142,7 @@ public class Cocos2dxWebView extends WebView {
|
|||
@Override
|
||||
public void onPageFinished(WebView view, final String url) {
|
||||
super.onPageFinished(view, url);
|
||||
Cocos2dxActivity activity = (Cocos2dxActivity)getContext();
|
||||
activity.runOnGLThread(new Runnable() {
|
||||
Cocos2dxHelper.runOnGLThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
Cocos2dxWebViewHelper._didFinishLoading(mViewTag, url);
|
||||
|
@ -153,7 +154,7 @@ public class Cocos2dxWebView extends WebView {
|
|||
public void onReceivedError(WebView view, int errorCode, String description, final String failingUrl) {
|
||||
super.onReceivedError(view, errorCode, description, failingUrl);
|
||||
Cocos2dxActivity activity = (Cocos2dxActivity)getContext();
|
||||
activity.runOnGLThread(new Runnable() {
|
||||
Cocos2dxHelper.runOnGLThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
Cocos2dxWebViewHelper._didFailLoading(mViewTag, failingUrl);
|
||||
|
|
|
@ -82,6 +82,23 @@ extern "C" {
|
|||
}
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_org_cocos2dx_lib_Cocos2dxHelper_nativeRunOnGLThread(JNIEnv* env, jclass, jobject runnable) {
|
||||
using jobject_type = std::remove_pointer_t<jobject>;
|
||||
struct jobject_delete {
|
||||
void operator()(jobject_type* __ptr) const _NOEXCEPT {
|
||||
JniHelper::getEnv()->DeleteGlobalRef(__ptr);
|
||||
}
|
||||
};
|
||||
|
||||
cocos2d::Director::getInstance()->getScheduler()->performFunctionInCocosThread([wrap = std::make_shared<std::unique_ptr<jobject_type, jobject_delete>>(env->NewGlobalRef(runnable))]{
|
||||
auto curEnv = JniHelper::getEnv();
|
||||
|
||||
JniMethodInfo mi;
|
||||
if(JniHelper::getMethodInfo(mi, "java/lang/Runnable", "run", "()V")){
|
||||
curEnv->CallVoidMethod(wrap.get()->get(), mi.methodID);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
const char * getApkPath() {
|
||||
|
|
|
@ -0,0 +1,113 @@
|
|||
/****************************************************************************
|
||||
Copyright (c) 2010-2012 cocos2d-x.org
|
||||
Copyright (c) 2013-2016 Chukong Technologies Inc.
|
||||
Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.
|
||||
|
||||
http://www.cocos2d-x.org
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
****************************************************************************/
|
||||
|
||||
#ifndef __PLATFORM_MAC_CCGL_H__
|
||||
#define __PLATFORM_MAC_CCGL_H__
|
||||
|
||||
#include "platform/CCPlatformConfig.h"
|
||||
#if CC_TARGET_PLATFORM == CC_PLATFORM_MAC
|
||||
|
||||
#import <OpenGL/gl.h>
|
||||
#import <OpenGL/glu.h>
|
||||
#import <OpenGL/glext.h>
|
||||
|
||||
#define CC_GL_DEPTH24_STENCIL8 -1
|
||||
|
||||
|
||||
#define glDeleteVertexArrays glDeleteVertexArraysAPPLE
|
||||
#define glGenVertexArrays glGenVertexArraysAPPLE
|
||||
#define glBindVertexArray glBindVertexArrayAPPLE
|
||||
#define glClearDepthf glClearDepth
|
||||
#define glDepthRangef glDepthRange
|
||||
#define glReleaseShaderCompiler(xxx)
|
||||
|
||||
// GLES macros, only for compiling compatible
|
||||
#if !defined(GL_ETC1_RGB8_OES)
|
||||
#define GL_ETC1_RGB8_OES 0x8D64
|
||||
#endif
|
||||
|
||||
#if !defined(GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG)
|
||||
#define GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG 0x8C00
|
||||
#define GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG 0x8C01
|
||||
#define GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG 0x8C02
|
||||
#define GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG 0x8C03
|
||||
#define GL_COMPRESSED_RGBA_PVRTC_2BPPV2_IMG 0x9137
|
||||
#define GL_COMPRESSED_RGBA_PVRTC_4BPPV2_IMG 0x9138
|
||||
#define GL_COMPRESSED_SRGB_PVRTC_2BPPV1_EXT 0x8A54
|
||||
#define GL_COMPRESSED_SRGB_PVRTC_4BPPV1_EXT 0x8A55
|
||||
#define GL_COMPRESSED_SRGB_ALPHA_PVRTC_2BPPV1_EXT 0x8A56
|
||||
#define GL_COMPRESSED_SRGB_ALPHA_PVRTC_4BPPV1_EXT 0x8A57
|
||||
#define GL_COMPRESSED_SRGB_ALPHA_PVRTC_2BPPV2_IMG 0x93F0
|
||||
#define GL_COMPRESSED_SRGB_ALPHA_PVRTC_4BPPV2_IMG 0x93F1
|
||||
#endif
|
||||
|
||||
#if !defined(GL_COMPRESSED_RGB8_ETC2)
|
||||
#define GL_COMPRESSED_RGB8_ETC2 0x9274
|
||||
#define GL_COMPRESSED_SRGB8_ETC2 0x9275
|
||||
#define GL_COMPRESSED_RGBA8_ETC2_EAC 0x9278
|
||||
#define GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC 0x9279
|
||||
#endif
|
||||
|
||||
#if !defined(GL_ATC_RGB_AMD)
|
||||
#define GL_ATC_RGB_AMD 0x8C92
|
||||
#define GL_ATC_RGBA_EXPLICIT_ALPHA_AMD 0x8C93
|
||||
#define GL_ATC_RGBA_INTERPOLATED_ALPHA_AMD 0x87EE
|
||||
#endif
|
||||
|
||||
#if !defined(GL_COMPRESSED_RGBA_ASTC_4x4_KHR)
|
||||
#define GL_COMPRESSED_RGBA_ASTC_4x4_KHR 0x93B0
|
||||
#define GL_COMPRESSED_RGBA_ASTC_5x4_KHR 0x93B1
|
||||
#define GL_COMPRESSED_RGBA_ASTC_5x5_KHR 0x93B2
|
||||
#define GL_COMPRESSED_RGBA_ASTC_6x5_KHR 0x93B3
|
||||
#define GL_COMPRESSED_RGBA_ASTC_6x6_KHR 0x93B4
|
||||
#define GL_COMPRESSED_RGBA_ASTC_8x5_KHR 0x93B5
|
||||
#define GL_COMPRESSED_RGBA_ASTC_8x6_KHR 0x93B6
|
||||
#define GL_COMPRESSED_RGBA_ASTC_8x8_KHR 0x93B7
|
||||
#define GL_COMPRESSED_RGBA_ASTC_10x5_KHR 0x93B8
|
||||
#define GL_COMPRESSED_RGBA_ASTC_10x6_KHR 0x93B9
|
||||
#define GL_COMPRESSED_RGBA_ASTC_10x8_KHR 0x93BA
|
||||
#define GL_COMPRESSED_RGBA_ASTC_10x10_KHR 0x93BB
|
||||
#define GL_COMPRESSED_RGBA_ASTC_12x10_KHR 0x93BC
|
||||
#define GL_COMPRESSED_RGBA_ASTC_12x12_KHR 0x93BD
|
||||
#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR 0x93D0
|
||||
#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR 0x93D1
|
||||
#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR 0x93D2
|
||||
#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR 0x93D3
|
||||
#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR 0x93D4
|
||||
#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR 0x93D5
|
||||
#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR 0x93D6
|
||||
#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR 0x93D7
|
||||
#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR 0x93D8
|
||||
#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR 0x93D9
|
||||
#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR 0x93DA
|
||||
#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR 0x93DB
|
||||
#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR 0x93DC
|
||||
#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR 0x93DD
|
||||
#endif
|
||||
|
||||
#endif // __PLATFORM_MAC_CCGL_H__
|
||||
|
||||
#endif //s CC_TARGET_PLATFORM == CC_PLATFORM_MAC
|
|
@ -379,8 +379,10 @@ bool GLViewImpl::initWithRect(const std::string& viewName, Rect rect, float fram
|
|||
|
||||
glfwWindowHint(GLFW_SAMPLES, _glContextAttrs.multisamplingCount);
|
||||
|
||||
#if defined(CC_USE_METAL)
|
||||
// Don't create gl context.
|
||||
glfwWindowHint(GLFW_CLIENT_API, GLFW_NO_API);
|
||||
#endif
|
||||
|
||||
int neededWidth = rect.size.width * _frameZoomFactor;
|
||||
int neededHeight = rect.size.height * _frameZoomFactor;
|
||||
|
@ -407,7 +409,8 @@ bool GLViewImpl::initWithRect(const std::string& viewName, Rect rect, float fram
|
|||
CGSize size;
|
||||
size.width = static_cast<CGFloat>(fbWidth);
|
||||
size.height = static_cast<CGFloat>(fbHeight);
|
||||
|
||||
|
||||
#if defined(CC_USE_METAL)
|
||||
// Initialize device.
|
||||
id<MTLDevice> device = MTLCreateSystemDefaultDevice();
|
||||
if (!device)
|
||||
|
@ -425,6 +428,7 @@ bool GLViewImpl::initWithRect(const std::string& viewName, Rect rect, float fram
|
|||
[layer setDrawableSize:size];
|
||||
[contentView setLayer:layer];
|
||||
backend::DeviceMTL::setCAMetalLayer(layer);
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Note that the created window and context may differ from what you requested,
|
||||
|
@ -447,6 +451,10 @@ bool GLViewImpl::initWithRect(const std::string& viewName, Rect rect, float fram
|
|||
rect.size.height = realH / _frameZoomFactor;
|
||||
}
|
||||
|
||||
#if defined(CC_USE_GL)
|
||||
glfwMakeContextCurrent(_mainWindow);
|
||||
#endif
|
||||
|
||||
glfwSetMouseButtonCallback(_mainWindow, GLFWEventHandler::onGLFWMouseCallBack);
|
||||
glfwSetCursorPosCallback(_mainWindow, GLFWEventHandler::onGLFWMouseMoveCallBack);
|
||||
glfwSetScrollCallback(_mainWindow, GLFWEventHandler::onGLFWMouseScrollCallback);
|
||||
|
@ -507,8 +515,10 @@ void GLViewImpl::end()
|
|||
|
||||
void GLViewImpl::swapBuffers()
|
||||
{
|
||||
// if(_mainWindow)
|
||||
// glfwSwapBuffers(_mainWindow);
|
||||
#if defined(CC_USE_GL)
|
||||
if(_mainWindow)
|
||||
glfwSwapBuffers(_mainWindow);
|
||||
#endif
|
||||
}
|
||||
|
||||
bool GLViewImpl::windowShouldClose()
|
||||
|
@ -984,10 +994,12 @@ void GLViewImpl::onGLFWWindowSizeCallback(GLFWwindow* /*window*/, int width, int
|
|||
Director::getInstance()->setViewport();
|
||||
Director::getInstance()->getEventDispatcher()->dispatchCustomEvent(GLViewImpl::EVENT_WINDOW_RESIZED, nullptr);
|
||||
|
||||
#if defined(CC_USE_METAL)
|
||||
//update metal attachment texture size.
|
||||
int fbWidth, fbHeight;
|
||||
glfwGetFramebufferSize(_mainWindow, &fbWidth, &fbHeight);
|
||||
backend::UtilsMTL::resizeDefaultAttachmentTexture(fbWidth, fbHeight);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -44,7 +44,7 @@ CustomCommand::~CustomCommand()
|
|||
|
||||
CustomCommand::CustomCommand(const CustomCommand& rhs)
|
||||
{
|
||||
this->assign(std::move(rhs));
|
||||
this->assign(rhs);
|
||||
}
|
||||
|
||||
CustomCommand::CustomCommand(CustomCommand&& rhs)
|
||||
|
|
|
@ -27,7 +27,7 @@
|
|||
#include "renderer/backend/DepthStencilState.h"
|
||||
#include "renderer/backend/Texture.h"
|
||||
#include "renderer/backend/VertexLayout.h"
|
||||
#include "renderer/backend/RenderPassParams.h"
|
||||
#include "renderer/backend/RenderPassDescriptor.h"
|
||||
#include "renderer/backend/ProgramState.h"
|
||||
|
||||
#include <string>
|
||||
|
|
|
@ -198,9 +198,9 @@ void Renderer::init()
|
|||
|
||||
auto device = backend::Device::getInstance();
|
||||
_commandBuffer = device->newCommandBuffer();
|
||||
// @MTL: the depth stencil flags must same render target and _depthStencilDescriptor
|
||||
_depthStencilDescriptor.depthStencilFlags = TargetBufferFlags::DEPTH_AND_STENCIL;
|
||||
_defaultRT = device->newDefaultRenderTarget(TargetBufferFlags::COLOR | _depthStencilDescriptor.depthStencilFlags);
|
||||
// @MTL: the depth stencil flags must same render target and _dsDesc
|
||||
_dsDesc.flags = DepthStencilFlags::ALL;
|
||||
_defaultRT = device->newDefaultRenderTarget(TargetBufferFlags::COLOR | TargetBufferFlags::DEPTH_AND_STENCIL);
|
||||
|
||||
_currentRT = _defaultRT;
|
||||
_renderPipeline = device->newRenderPipeline();
|
||||
|
@ -380,9 +380,9 @@ void Renderer::render()
|
|||
_isRendering = false;
|
||||
}
|
||||
|
||||
void Renderer::beginFrame()
|
||||
bool Renderer::beginFrame()
|
||||
{
|
||||
_commandBuffer->beginFrame();
|
||||
return _commandBuffer->beginFrame();
|
||||
}
|
||||
|
||||
void Renderer::endFrame()
|
||||
|
@ -419,11 +419,11 @@ void Renderer::setDepthTest(bool value)
|
|||
{
|
||||
if (value) {
|
||||
_currentRT->addFlag(TargetBufferFlags::DEPTH);
|
||||
_depthStencilDescriptor.addFlag(TargetBufferFlags::DEPTH);
|
||||
_dsDesc.addFlag(DepthStencilFlags::DEPTH_TEST);
|
||||
}
|
||||
else {
|
||||
_currentRT->removeFlag(TargetBufferFlags::DEPTH);
|
||||
_depthStencilDescriptor.removeFlag(TargetBufferFlags::DEPTH);
|
||||
_dsDesc.removeFlag(DepthStencilFlags::DEPTH_TEST);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -431,51 +431,54 @@ void Renderer::setStencilTest(bool value)
|
|||
{
|
||||
if (value) {
|
||||
_currentRT->addFlag(TargetBufferFlags::STENCIL);
|
||||
_depthStencilDescriptor.addFlag(TargetBufferFlags::STENCIL);
|
||||
_dsDesc.addFlag(DepthStencilFlags::STENCIL_TEST);
|
||||
}
|
||||
else {
|
||||
_currentRT->removeFlag(TargetBufferFlags::STENCIL);
|
||||
_depthStencilDescriptor.removeFlag(TargetBufferFlags::STENCIL);
|
||||
_dsDesc.removeFlag(DepthStencilFlags::STENCIL_TEST);
|
||||
}
|
||||
}
|
||||
|
||||
void Renderer::setDepthWrite(bool value)
|
||||
{
|
||||
_depthStencilDescriptor.depthWriteEnabled = value;
|
||||
if(value)
|
||||
_dsDesc.addFlag(DepthStencilFlags::DEPTH_WRITE);
|
||||
else
|
||||
_dsDesc.removeFlag(DepthStencilFlags::DEPTH_WRITE);
|
||||
}
|
||||
|
||||
void Renderer::setDepthCompareFunction(backend::CompareFunction func)
|
||||
{
|
||||
_depthStencilDescriptor.depthCompareFunction = func;
|
||||
_dsDesc.depthCompareFunction = func;
|
||||
}
|
||||
|
||||
backend::CompareFunction Renderer::getDepthCompareFunction() const
|
||||
{
|
||||
return _depthStencilDescriptor.depthCompareFunction;
|
||||
return _dsDesc.depthCompareFunction;
|
||||
}
|
||||
|
||||
bool Renderer::Renderer::getDepthTest() const
|
||||
{
|
||||
return bitmask::any(_depthStencilDescriptor.depthStencilFlags, TargetBufferFlags::DEPTH);
|
||||
return bitmask::any(_dsDesc.flags, DepthStencilFlags::DEPTH_TEST);
|
||||
}
|
||||
|
||||
bool Renderer::getStencilTest() const
|
||||
{
|
||||
return bitmask::any(_depthStencilDescriptor.depthStencilFlags, TargetBufferFlags::STENCIL);
|
||||
return bitmask::any(_dsDesc.flags, DepthStencilFlags::STENCIL_TEST);
|
||||
}
|
||||
|
||||
bool Renderer::getDepthWrite() const
|
||||
{
|
||||
return _depthStencilDescriptor.depthWriteEnabled;
|
||||
return bitmask::any(_dsDesc.flags, DepthStencilFlags::DEPTH_WRITE);
|
||||
}
|
||||
|
||||
void Renderer::setStencilCompareFunction(backend::CompareFunction func, unsigned int ref, unsigned int readMask)
|
||||
{
|
||||
_depthStencilDescriptor.frontFaceStencil.stencilCompareFunction = func;
|
||||
_depthStencilDescriptor.backFaceStencil.stencilCompareFunction = func;
|
||||
_dsDesc.frontFaceStencil.stencilCompareFunction = func;
|
||||
_dsDesc.backFaceStencil.stencilCompareFunction = func;
|
||||
|
||||
_depthStencilDescriptor.frontFaceStencil.readMask = readMask;
|
||||
_depthStencilDescriptor.backFaceStencil.readMask = readMask;
|
||||
_dsDesc.frontFaceStencil.readMask = readMask;
|
||||
_dsDesc.backFaceStencil.readMask = readMask;
|
||||
|
||||
_stencilRef = ref;
|
||||
}
|
||||
|
@ -484,50 +487,50 @@ void Renderer::setStencilOperation(backend::StencilOperation stencilFailureOp,
|
|||
backend::StencilOperation depthFailureOp,
|
||||
backend::StencilOperation stencilDepthPassOp)
|
||||
{
|
||||
_depthStencilDescriptor.frontFaceStencil.stencilFailureOperation = stencilFailureOp;
|
||||
_depthStencilDescriptor.backFaceStencil.stencilFailureOperation = stencilFailureOp;
|
||||
_dsDesc.frontFaceStencil.stencilFailureOperation = stencilFailureOp;
|
||||
_dsDesc.backFaceStencil.stencilFailureOperation = stencilFailureOp;
|
||||
|
||||
_depthStencilDescriptor.frontFaceStencil.depthFailureOperation = depthFailureOp;
|
||||
_depthStencilDescriptor.backFaceStencil.depthFailureOperation = depthFailureOp;
|
||||
_dsDesc.frontFaceStencil.depthFailureOperation = depthFailureOp;
|
||||
_dsDesc.backFaceStencil.depthFailureOperation = depthFailureOp;
|
||||
|
||||
_depthStencilDescriptor.frontFaceStencil.depthStencilPassOperation = stencilDepthPassOp;
|
||||
_depthStencilDescriptor.backFaceStencil.depthStencilPassOperation = stencilDepthPassOp;
|
||||
_dsDesc.frontFaceStencil.depthStencilPassOperation = stencilDepthPassOp;
|
||||
_dsDesc.backFaceStencil.depthStencilPassOperation = stencilDepthPassOp;
|
||||
}
|
||||
|
||||
void Renderer::setStencilWriteMask(unsigned int mask)
|
||||
{
|
||||
_depthStencilDescriptor.frontFaceStencil.writeMask = mask;
|
||||
_depthStencilDescriptor.backFaceStencil.writeMask = mask;
|
||||
_dsDesc.frontFaceStencil.writeMask = mask;
|
||||
_dsDesc.backFaceStencil.writeMask = mask;
|
||||
}
|
||||
|
||||
backend::StencilOperation Renderer::getStencilFailureOperation() const
|
||||
{
|
||||
return _depthStencilDescriptor.frontFaceStencil.stencilFailureOperation;
|
||||
return _dsDesc.frontFaceStencil.stencilFailureOperation;
|
||||
}
|
||||
|
||||
backend::StencilOperation Renderer::getStencilPassDepthFailureOperation() const
|
||||
{
|
||||
return _depthStencilDescriptor.frontFaceStencil.depthFailureOperation;
|
||||
return _dsDesc.frontFaceStencil.depthFailureOperation;
|
||||
}
|
||||
|
||||
backend::StencilOperation Renderer::getStencilDepthPassOperation() const
|
||||
{
|
||||
return _depthStencilDescriptor.frontFaceStencil.depthStencilPassOperation;
|
||||
return _dsDesc.frontFaceStencil.depthStencilPassOperation;
|
||||
}
|
||||
|
||||
backend::CompareFunction Renderer::getStencilCompareFunction() const
|
||||
{
|
||||
return _depthStencilDescriptor.depthCompareFunction;
|
||||
return _dsDesc.depthCompareFunction;
|
||||
}
|
||||
|
||||
unsigned int Renderer::getStencilReadMask() const
|
||||
{
|
||||
return _depthStencilDescriptor.frontFaceStencil.readMask;
|
||||
return _dsDesc.frontFaceStencil.readMask;
|
||||
}
|
||||
|
||||
unsigned int Renderer::getStencilWriteMask() const
|
||||
{
|
||||
return _depthStencilDescriptor.frontFaceStencil.writeMask;
|
||||
return _dsDesc.frontFaceStencil.writeMask;
|
||||
}
|
||||
|
||||
unsigned int Renderer::getStencilReferenceValue() const
|
||||
|
@ -535,6 +538,16 @@ unsigned int Renderer::getStencilReferenceValue() const
|
|||
return _stencilRef;
|
||||
}
|
||||
|
||||
void Renderer::setDepthStencilDesc(const backend::DepthStencilDescriptor& dsDesc)
|
||||
{
|
||||
_dsDesc = dsDesc;
|
||||
}
|
||||
|
||||
const backend::DepthStencilDescriptor& Renderer::getDepthStencilDesc() const
|
||||
{
|
||||
return _dsDesc;
|
||||
}
|
||||
|
||||
void Renderer::setViewPort(int x, int y, unsigned int w, unsigned int h)
|
||||
{
|
||||
_viewport.x = x;
|
||||
|
@ -644,13 +657,13 @@ void Renderer::drawBatchedTriangles()
|
|||
|
||||
/************** 2: Draw *************/
|
||||
beginRenderPass();
|
||||
_commandBuffer->setVertexBuffer(_vertexBuffer);
|
||||
_commandBuffer->setIndexBuffer(_indexBuffer);
|
||||
|
||||
for (int i = 0; i < batchesTotal; ++i)
|
||||
{
|
||||
|
||||
auto& drawInfo = _triBatchesToDraw[i];
|
||||
_commandBuffer->updatePipelineState(_currentRT, drawInfo.cmd->getPipelineDescriptor());
|
||||
_commandBuffer->setVertexBuffer(_vertexBuffer);
|
||||
_commandBuffer->setIndexBuffer(_indexBuffer);
|
||||
auto& pipelineDescriptor = drawInfo.cmd->getPipelineDescriptor();
|
||||
_commandBuffer->setProgramState(pipelineDescriptor.programState);
|
||||
_commandBuffer->drawElements(backend::PrimitiveType::TRIANGLE,
|
||||
|
@ -661,8 +674,8 @@ void Renderer::drawBatchedTriangles()
|
|||
|
||||
_drawnBatches++;
|
||||
_drawnVertices += _triBatchesToDraw[i].indicesToDraw;
|
||||
|
||||
}
|
||||
|
||||
_commandBuffer->endRenderPass();
|
||||
|
||||
|
||||
|
@ -682,8 +695,9 @@ void Renderer::drawCustomCommand(RenderCommand *command)
|
|||
if (cmd->getBeforeCallback()) cmd->getBeforeCallback()();
|
||||
|
||||
beginRenderPass();
|
||||
_commandBuffer->updatePipelineState(_currentRT, cmd->getPipelineDescriptor());
|
||||
_commandBuffer->setVertexBuffer(cmd->getVertexBuffer());
|
||||
|
||||
_commandBuffer->updatePipelineState(_currentRT, cmd->getPipelineDescriptor());
|
||||
_commandBuffer->setProgramState(cmd->getPipelineDescriptor().programState);
|
||||
|
||||
auto drawType = cmd->getDrawType();
|
||||
|
@ -782,13 +796,15 @@ void Renderer::readPixels(backend::RenderTarget* rt, std::function<void(const ba
|
|||
|
||||
void Renderer::beginRenderPass()
|
||||
{
|
||||
_commandBuffer->beginRenderPass(_currentRT, _renderPassParams);
|
||||
_commandBuffer->beginRenderPass(_currentRT, _renderPassDesc);
|
||||
_commandBuffer->updateDepthStencilState(_dsDesc);
|
||||
_commandBuffer->setStencilReferenceValue(_stencilRef);
|
||||
|
||||
_commandBuffer->setViewport(_viewport.x, _viewport.y, _viewport.w, _viewport.h);
|
||||
_commandBuffer->setCullMode(_cullMode);
|
||||
_commandBuffer->setWinding(_winding);
|
||||
_commandBuffer->setScissorRect(_scissorState.isEnabled, _scissorState.rect.x, _scissorState.rect.y, _scissorState.rect.width, _scissorState.rect.height);
|
||||
_commandBuffer->setStencilReferenceValue(_stencilRef);
|
||||
_commandBuffer->updateDepthStencilState(_depthStencilDescriptor);
|
||||
|
||||
}
|
||||
|
||||
void Renderer::clear(ClearFlag flags, const Color4F& color, float depth, unsigned int stencil, float globalOrder)
|
||||
|
@ -798,7 +814,7 @@ void Renderer::clear(ClearFlag flags, const Color4F& color, float depth, unsigne
|
|||
CallbackCommand* command = nextClearCommand();
|
||||
command->init(globalOrder);
|
||||
command->func = [=]() -> void {
|
||||
backend::RenderPassParams descriptor;
|
||||
backend::RenderPassDescriptor descriptor;
|
||||
|
||||
descriptor.flags.clear = flags;
|
||||
if (bitmask::any(flags, ClearFlag::COLOR)) {
|
||||
|
@ -839,12 +855,12 @@ const Color4F& Renderer::getClearColor() const
|
|||
|
||||
float Renderer::getClearDepth() const
|
||||
{
|
||||
return _renderPassParams.clearDepthValue;
|
||||
return _renderPassDesc.clearDepthValue;
|
||||
}
|
||||
|
||||
unsigned int Renderer::getClearStencil() const
|
||||
{
|
||||
return _renderPassParams.clearStencilValue;
|
||||
return _renderPassDesc.clearStencilValue;
|
||||
}
|
||||
|
||||
ClearFlag Renderer::getClearFlag() const
|
||||
|
|
|
@ -337,6 +337,16 @@ public:
|
|||
* @see `setStencilCompareFunction(backend::CompareFunction func, unsigned int ref, unsigned int readMask)`
|
||||
*/
|
||||
unsigned int getStencilReferenceValue() const;
|
||||
|
||||
/**
|
||||
* Sets depth stencil descriptor
|
||||
*/
|
||||
void setDepthStencilDesc(const backend::DepthStencilDescriptor& dsDesc);
|
||||
|
||||
/**
|
||||
* Gets depth stencil descriptor
|
||||
*/
|
||||
const backend::DepthStencilDescriptor& getDepthStencilDesc() const;
|
||||
|
||||
/**
|
||||
* Fixed-function state
|
||||
|
@ -442,7 +452,7 @@ protected:
|
|||
void drawCustomCommand(RenderCommand* command);
|
||||
void drawMeshCommand(RenderCommand* command);
|
||||
|
||||
void beginFrame(); /// Indicate the begining of a frame
|
||||
bool beginFrame(); /// Indicate the begining of a frame
|
||||
void endFrame(); /// Finish a frame.
|
||||
|
||||
///Draw the previews queued triangles and flush previous context
|
||||
|
@ -491,10 +501,10 @@ protected:
|
|||
TriangleCommandBufferManager _triangleCommandBufferManager;
|
||||
|
||||
backend::CommandBuffer* _commandBuffer = nullptr;
|
||||
backend::RenderPassParams _renderPassParams;
|
||||
backend::RenderPassDescriptor _renderPassDesc;
|
||||
|
||||
backend::DepthStencilState* _depthStencilState = nullptr;
|
||||
backend::DepthStencilDescriptor _depthStencilDescriptor;
|
||||
backend::DepthStencilDescriptor _dsDesc;
|
||||
|
||||
// Internal structure that has the information for the batches
|
||||
struct TriBatchToDraw
|
||||
|
|
|
@ -27,7 +27,7 @@ set(COCOS_RENDERER_HEADER
|
|||
renderer/backend/Program.h
|
||||
renderer/backend/ProgramCache.h
|
||||
renderer/backend/Macros.h
|
||||
renderer/backend/RenderPassParams.h
|
||||
renderer/backend/RenderPassDescriptor.h
|
||||
renderer/backend/RenderPipeline.h
|
||||
renderer/backend/ShaderModule.h
|
||||
renderer/backend/Texture.h
|
||||
|
@ -73,10 +73,10 @@ set(COCOS_RENDERER_SRC
|
|||
renderer/backend/ProgramState.cpp
|
||||
renderer/backend/ProgramStateRegistry.cpp
|
||||
renderer/backend/ShaderCache.cpp
|
||||
renderer/backend/RenderPassParams.cpp
|
||||
renderer/backend/RenderPassDescriptor.cpp
|
||||
)
|
||||
|
||||
if(ANDROID OR WINDOWS OR LINUX OR (IOS AND CC_FORCE_USE_GLES))
|
||||
if(ANDROID OR WINDOWS OR LINUX OR CC_COMPAT_GL)
|
||||
|
||||
list(APPEND COCOS_RENDERER_HEADER
|
||||
renderer/backend/opengl/BufferGL.h
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
#include "renderer/backend/RenderPassParams.h"
|
||||
#include "renderer/backend/RenderPassDescriptor.h"
|
||||
#include "renderer/backend/RenderPipeline.h"
|
||||
#include "renderer/backend/Device.h"
|
||||
#include "renderer/backend/Types.h"
|
||||
|
|
|
@ -31,7 +31,7 @@
|
|||
|
||||
#include "Macros.h"
|
||||
#include "Types.h"
|
||||
#include "RenderPassParams.h"
|
||||
#include "RenderPassDescriptor.h"
|
||||
#include "PixelBufferDescriptor.h"
|
||||
#include "CCStdC.h"
|
||||
#include "ProgramState.h"
|
||||
|
@ -81,13 +81,13 @@ public:
|
|||
/**
|
||||
* @brief Indicate the begining of a frame
|
||||
*/
|
||||
virtual void beginFrame() = 0;
|
||||
virtual bool beginFrame() = 0;
|
||||
|
||||
/**
|
||||
* Begin a render pass, initial color, depth and stencil attachment.
|
||||
* @param descriptor Specifies a group of render targets that hold the results of a render pass.
|
||||
*/
|
||||
virtual void beginRenderPass(const RenderTarget* renderTarget, const RenderPassParams& descriptor) = 0;
|
||||
virtual void beginRenderPass(const RenderTarget* renderTarget, const RenderPassDescriptor& descriptor) = 0;
|
||||
|
||||
|
||||
/**
|
||||
|
|
|
@ -23,6 +23,7 @@
|
|||
****************************************************************************/
|
||||
|
||||
#include "DepthStencilState.h"
|
||||
#include "RenderTarget.h"
|
||||
|
||||
CC_BACKEND_BEGIN
|
||||
|
||||
|
@ -40,13 +41,9 @@ bool StencilDescriptor::operator==(const StencilDescriptor &rhs) const
|
|||
DepthStencilState::~DepthStencilState()
|
||||
{}
|
||||
|
||||
bool DepthStencilState::isEnabled() const {
|
||||
return bitmask::any(_depthStencilInfo.depthStencilFlags, TargetBufferFlags::DEPTH_AND_STENCIL);
|
||||
}
|
||||
|
||||
void DepthStencilState::update(const DepthStencilDescriptor& descriptor) {
|
||||
_depthStencilInfo = descriptor;
|
||||
_isBackFrontStencilEqual = descriptor.backFaceStencil == descriptor.frontFaceStencil;
|
||||
void DepthStencilState::update(const DepthStencilDescriptor& dsDesc) {
|
||||
_depthStencilInfo = dsDesc;
|
||||
_isBackFrontStencilEqual = dsDesc.backFaceStencil == dsDesc.frontFaceStencil;
|
||||
}
|
||||
|
||||
CC_BACKEND_END
|
||||
|
|
|
@ -31,6 +31,7 @@
|
|||
|
||||
CC_BACKEND_BEGIN
|
||||
|
||||
class RenderTarget;
|
||||
/**
|
||||
* @addtogroup _backend
|
||||
* @{
|
||||
|
@ -59,11 +60,10 @@ struct DepthStencilDescriptor
|
|||
CompareFunction depthCompareFunction = CompareFunction::LESS;
|
||||
StencilDescriptor backFaceStencil;
|
||||
StencilDescriptor frontFaceStencil;
|
||||
bool depthWriteEnabled = false;
|
||||
TargetBufferFlags depthStencilFlags = {};
|
||||
|
||||
void addFlag(TargetBufferFlags flag) { depthStencilFlags |= flag; }
|
||||
void removeFlag(TargetBufferFlags flag) { depthStencilFlags &= ~flag; }
|
||||
void addFlag(DepthStencilFlags flag) { this->flags |= flag; }
|
||||
void removeFlag(DepthStencilFlags flag) { this->flags &= ~flag; }
|
||||
// must match current render target
|
||||
DepthStencilFlags flags = DepthStencilFlags::ALL;
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -72,9 +72,9 @@ struct DepthStencilDescriptor
|
|||
class DepthStencilState : public cocos2d::Ref
|
||||
{
|
||||
public:
|
||||
virtual void update(const DepthStencilDescriptor& descriptor);
|
||||
virtual void update(const DepthStencilDescriptor& desc);
|
||||
const DepthStencilDescriptor& getDepthStencilInfo()const { return _depthStencilInfo; }
|
||||
bool isEnabled() const;
|
||||
bool isEnabled() const { return bitmask::any(_depthStencilInfo.flags, DepthStencilFlags::DEPTH_STENCIL_TEST); }
|
||||
protected:
|
||||
/**
|
||||
* @param descriptor Specifies depth and stencil descriptor.
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
|
||||
#include "Macros.h"
|
||||
#include "Types.h"
|
||||
#include "RenderPassParams.h"
|
||||
#include "RenderPassDescriptor.h"
|
||||
#include "Texture.h"
|
||||
#include "DepthStencilState.h"
|
||||
#include "ProgramCache.h"
|
||||
|
|
|
@ -140,13 +140,14 @@ public:
|
|||
* @return The uniformInfos.
|
||||
*/
|
||||
virtual const std::unordered_map<std::string, UniformInfo>& getAllActiveUniformInfo(ShaderStage stage) const = 0;
|
||||
|
||||
protected:
|
||||
|
||||
/**
|
||||
* Set engin built-in program type.
|
||||
* @param type Specifies the program type.
|
||||
*/
|
||||
void setProgramType(uint32_t type);
|
||||
|
||||
protected:
|
||||
|
||||
/**
|
||||
* @param vs Specifes the vertex shader source.
|
||||
|
|
|
@ -22,11 +22,11 @@
|
|||
THE SOFTWARE.
|
||||
****************************************************************************/
|
||||
|
||||
#include "RenderPassParams.h"
|
||||
#include "RenderPassDescriptor.h"
|
||||
|
||||
CC_BACKEND_BEGIN
|
||||
|
||||
bool RenderPassParams::operator==(const RenderPassParams& descriptor) const
|
||||
bool RenderPassDescriptor::operator==(const RenderPassDescriptor& descriptor) const
|
||||
{
|
||||
return (clearDepthValue == descriptor.clearDepthValue &&
|
||||
clearStencilValue == descriptor.clearStencilValue &&
|
|
@ -62,10 +62,10 @@ struct RenderPassFlags {
|
|||
/**
|
||||
* Store values about color, depth and stencil attachment.
|
||||
*/
|
||||
struct RenderPassParams
|
||||
struct RenderPassDescriptor
|
||||
{
|
||||
RenderPassParams& operator=(const RenderPassParams& descriptor) = default;
|
||||
bool operator==(const RenderPassParams& descriptor) const;
|
||||
RenderPassDescriptor& operator=(const RenderPassDescriptor& descriptor) = default;
|
||||
bool operator==(const RenderPassDescriptor& descriptor) const;
|
||||
|
||||
float clearDepthValue = 0.f;
|
||||
float clearStencilValue = 0.f;
|
||||
|
@ -74,8 +74,6 @@ struct RenderPassParams
|
|||
// Now, only clear flag used
|
||||
RenderPassFlags flags{};
|
||||
};
|
||||
typedef RenderPassParams RenderPassParams;
|
||||
|
||||
//end of _backend group
|
||||
/// @}
|
||||
CC_BACKEND_END
|
|
@ -28,7 +28,7 @@
|
|||
#include "Types.h"
|
||||
#include "base/CCRef.h"
|
||||
#include "renderer/CCPipelineDescriptor.h"
|
||||
#include "renderer/backend/RenderPassParams.h"
|
||||
#include "renderer/backend/RenderPassDescriptor.h"
|
||||
|
||||
CC_BACKEND_BEGIN
|
||||
/**
|
||||
|
|
|
@ -266,7 +266,6 @@ enum class ColorWriteMask : uint32_t
|
|||
CC_ENABLE_BITMASK_OPS(ColorWriteMask)
|
||||
CC_ENABLE_BITSHIFT_OPS(ColorWriteMask)
|
||||
|
||||
|
||||
/**
|
||||
* Bitmask for selecting render buffers
|
||||
*/
|
||||
|
@ -293,6 +292,17 @@ inline TargetBufferFlags getMRTColorFlag(size_t index) noexcept {
|
|||
typedef TargetBufferFlags ClearFlag;
|
||||
typedef TargetBufferFlags RenderTargetFlag;
|
||||
|
||||
enum class DepthStencilFlags : unsigned int {
|
||||
NONE = 0,
|
||||
DEPTH_TEST = 1,
|
||||
DEPTH_WRITE = 1 << 1,
|
||||
STENCIL_TEST = 1 << 2,
|
||||
DEPTH_STENCIL_TEST = DEPTH_TEST | STENCIL_TEST,
|
||||
ALL = DEPTH_TEST | STENCIL_TEST | DEPTH_WRITE,
|
||||
};
|
||||
CC_ENABLE_BITMASK_OPS(DepthStencilFlags)
|
||||
CC_ENABLE_BITSHIFT_OPS(DepthStencilFlags)
|
||||
|
||||
struct SamplerDescriptor
|
||||
{
|
||||
SamplerFilter magFilter = SamplerFilter::LINEAR;
|
||||
|
|
|
@ -72,14 +72,14 @@ public:
|
|||
* Then create MTLCommandBuffer and enqueue it to MTLCommandQueue.
|
||||
* Then start schedule available MTLBuffer
|
||||
*/
|
||||
virtual void beginFrame() override;
|
||||
virtual bool beginFrame() override;
|
||||
|
||||
/**
|
||||
* Create a MTLRenderCommandEncoder object for graphics rendering to an attachment in a RenderPassParams.
|
||||
* MTLRenderCommandEncoder is cached if current RenderPassParams is identical to previous one.
|
||||
* Create a MTLRenderCommandEncoder object for graphics rendering to an attachment in a RenderPassDescriptor.
|
||||
* MTLRenderCommandEncoder is cached if current RenderPassDescriptor is identical to previous one.
|
||||
* @param descriptor Specifies a group of render targets that hold the results of a render pass.
|
||||
*/
|
||||
virtual void beginRenderPass(const RenderTarget* renderTarget, const RenderPassParams& descriptor) override;
|
||||
virtual void beginRenderPass(const RenderTarget* renderTarget, const RenderPassDescriptor& descriptor) override;
|
||||
|
||||
/**
|
||||
* Update depthStencil status, improvment: for metal backend cache it
|
||||
|
@ -208,7 +208,7 @@ private:
|
|||
void afterDraw();
|
||||
void flush();
|
||||
void flushCaptureCommands();
|
||||
id<MTLRenderCommandEncoder> getRenderCommandEncoder(const RenderTarget* renderTarget, const RenderPassParams& renderPassParams);
|
||||
void updateRenderCommandEncoder(const RenderTarget* renderTarget, const RenderPassDescriptor& renderPassParams);
|
||||
|
||||
id<MTLCommandBuffer> _mtlCommandBuffer = nil;
|
||||
id<MTLCommandQueue> _mtlCommandQueue = nil;
|
||||
|
@ -225,7 +225,7 @@ private:
|
|||
|
||||
dispatch_semaphore_t _frameBoundarySemaphore;
|
||||
const RenderTarget* _currentRenderTarget = nil; // weak ref
|
||||
RenderPassParams _currentRenderPassParams;
|
||||
RenderPassDescriptor _currentRenderPassDesc;
|
||||
TargetBufferFlags _currentRenderTargetFlags = TargetBufferFlags::NONE;
|
||||
NSAutoreleasePool* _autoReleasePool = nil;
|
||||
|
||||
|
|
|
@ -125,12 +125,12 @@ namespace
|
|||
}
|
||||
}
|
||||
|
||||
static MTLRenderPassDescriptor* toMTLRenderPassDescriptor(const RenderTarget* rt, const RenderPassParams& params)
|
||||
static MTLRenderPassDescriptor* toMTLRenderPassDescriptor(const RenderTarget* rt, const RenderPassDescriptor& desc)
|
||||
{
|
||||
MTLRenderPassDescriptor* mtlDescritpor = [MTLRenderPassDescriptor renderPassDescriptor];
|
||||
|
||||
auto rtMTL = static_cast<const RenderTargetMTL*>(rt);
|
||||
rtMTL->applyRenderPassAttachments(params, mtlDescritpor);
|
||||
rtMTL->applyRenderPassAttachments(desc, mtlDescritpor);
|
||||
return mtlDescritpor;
|
||||
}
|
||||
|
||||
|
@ -185,7 +185,7 @@ void CommandBufferMTL::setRenderPipeline(RenderPipeline* renderPipeline)
|
|||
_renderPipelineMTL = static_cast<RenderPipelineMTL*>(renderPipeline);
|
||||
}
|
||||
|
||||
void CommandBufferMTL::beginFrame()
|
||||
bool CommandBufferMTL::beginFrame()
|
||||
{
|
||||
_autoReleasePool = [[NSAutoreleasePool alloc] init];
|
||||
dispatch_semaphore_wait(_frameBoundarySemaphore, DISPATCH_TIME_FOREVER);
|
||||
|
@ -196,12 +196,13 @@ void CommandBufferMTL::beginFrame()
|
|||
[_mtlCommandBuffer retain];
|
||||
|
||||
BufferManager::beginFrame();
|
||||
return true;
|
||||
}
|
||||
|
||||
id<MTLRenderCommandEncoder> CommandBufferMTL::getRenderCommandEncoder(const RenderTarget* renderTarget, const RenderPassParams& renderPassParams)
|
||||
void CommandBufferMTL::updateRenderCommandEncoder(const RenderTarget* renderTarget, const RenderPassDescriptor& renderPassDesc)
|
||||
{
|
||||
if(_mtlRenderEncoder != nil &&
|
||||
_currentRenderPassParams == renderPassParams &&
|
||||
_currentRenderPassDesc == renderPassDesc &&
|
||||
_currentRenderTarget == renderTarget &&
|
||||
_currentRenderTargetFlags == renderTarget->getTargetFlags())
|
||||
{
|
||||
|
@ -209,7 +210,7 @@ id<MTLRenderCommandEncoder> CommandBufferMTL::getRenderCommandEncoder(const Rend
|
|||
}
|
||||
|
||||
_currentRenderTarget = renderTarget;
|
||||
_currentRenderPassParams = renderPassParams;
|
||||
_currentRenderPassDesc = renderPassDesc;
|
||||
_currentRenderTargetFlags = renderTarget->getTargetFlags();
|
||||
|
||||
if(_mtlRenderEncoder != nil)
|
||||
|
@ -219,22 +220,19 @@ id<MTLRenderCommandEncoder> CommandBufferMTL::getRenderCommandEncoder(const Rend
|
|||
_mtlRenderEncoder = nil;
|
||||
}
|
||||
|
||||
auto mtlDescriptor = toMTLRenderPassDescriptor(renderTarget, renderPassParams);
|
||||
auto mtlDescriptor = toMTLRenderPassDescriptor(renderTarget, renderPassDesc);
|
||||
_renderTargetWidth = (unsigned int)mtlDescriptor.colorAttachments[0].texture.width;
|
||||
_renderTargetHeight = (unsigned int)mtlDescriptor.colorAttachments[0].texture.height;
|
||||
id<MTLRenderCommandEncoder> mtlRenderEncoder = [_mtlCommandBuffer renderCommandEncoderWithDescriptor:mtlDescriptor];
|
||||
[mtlRenderEncoder retain];
|
||||
|
||||
return mtlRenderEncoder;
|
||||
_mtlRenderEncoder = [_mtlCommandBuffer renderCommandEncoderWithDescriptor:mtlDescriptor];
|
||||
[_mtlRenderEncoder retain];
|
||||
}
|
||||
|
||||
void CommandBufferMTL::beginRenderPass(const RenderTarget* renderTarget, const RenderPassParams& descriptor)
|
||||
void CommandBufferMTL::beginRenderPass(const RenderTarget* renderTarget, const RenderPassDescriptor& renderPassDesc)
|
||||
{
|
||||
_mtlRenderEncoder = getRenderCommandEncoder(renderTarget, descriptor);
|
||||
updateRenderCommandEncoder(renderTarget, renderPassDesc);
|
||||
// [_mtlRenderEncoder setFrontFacingWinding:MTLWindingCounterClockwise];
|
||||
}
|
||||
|
||||
|
||||
void CommandBufferMTL::updateDepthStencilState(const DepthStencilDescriptor& descriptor)
|
||||
{
|
||||
_depthStencilStateMTL->update(descriptor);
|
||||
|
@ -315,7 +313,6 @@ void CommandBufferMTL::drawElements(PrimitiveType primitiveType, IndexFormat ind
|
|||
void CommandBufferMTL::endRenderPass()
|
||||
{
|
||||
afterDraw();
|
||||
|
||||
}
|
||||
|
||||
void CommandBufferMTL::readPixels(RenderTarget* rt, std::function<void(const PixelBufferDescriptor&)> callback)
|
||||
|
@ -335,8 +332,9 @@ void CommandBufferMTL::endFrame()
|
|||
[_mtlRenderEncoder release];
|
||||
_mtlRenderEncoder = nil;
|
||||
|
||||
[_mtlCommandBuffer presentDrawable:DeviceMTL::getCurrentDrawable()];
|
||||
_drawableTexture = DeviceMTL::getCurrentDrawable().texture;
|
||||
auto currentDrawable = DeviceMTL::getCurrentDrawable();
|
||||
[_mtlCommandBuffer presentDrawable:currentDrawable];
|
||||
_drawableTexture = currentDrawable.texture;
|
||||
[_mtlCommandBuffer addCompletedHandler:^(id<MTLCommandBuffer> commandBuffer) {
|
||||
// GPU work is complete
|
||||
// Signal the semaphore to start the CPU work
|
||||
|
|
|
@ -50,9 +50,7 @@ public:
|
|||
DepthStencilStateMTL(id<MTLDevice> mtlDevice);
|
||||
~DepthStencilStateMTL();
|
||||
|
||||
uint32_t hashValue() const;
|
||||
|
||||
void update(const DepthStencilDescriptor& descriptor) override;
|
||||
void update(const DepthStencilDescriptor& dsDesc) override;
|
||||
|
||||
/// @name Setters & Getters
|
||||
/**
|
||||
|
|
|
@ -23,6 +23,7 @@
|
|||
****************************************************************************/
|
||||
|
||||
#include "DepthStencilStateMTL.h"
|
||||
#include "../RenderTarget.h"
|
||||
#include "xxhash.h"
|
||||
|
||||
CC_BACKEND_BEGIN
|
||||
|
@ -106,32 +107,25 @@ namespace
|
|||
|
||||
DepthStencilStateMTL::DepthStencilStateMTL(id<MTLDevice> mtlDevice) : _mtlDevice(mtlDevice)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
uint32_t DepthStencilStateMTL::hashValue() const
|
||||
void DepthStencilStateMTL::update(const DepthStencilDescriptor& dsDesc)
|
||||
{
|
||||
DepthStencilDescriptor hashMe;
|
||||
memset(&hashMe, 0, sizeof(hashMe));
|
||||
DepthStencilState::update(dsDesc);
|
||||
|
||||
hashMe.depthCompareFunction = _depthStencilInfo.depthCompareFunction;
|
||||
hashMe.backFaceStencil = _depthStencilInfo.backFaceStencil;
|
||||
hashMe.frontFaceStencil = _depthStencilInfo.frontFaceStencil;
|
||||
hashMe.depthWriteEnabled = _depthStencilInfo.depthWriteEnabled;
|
||||
hashMe.depthStencilFlags = _depthStencilInfo.depthStencilFlags;
|
||||
|
||||
return XXH32((const void*)&hashMe, sizeof(hashMe), 0);
|
||||
}
|
||||
|
||||
void DepthStencilStateMTL::update(const DepthStencilDescriptor& descriptor)
|
||||
{
|
||||
DepthStencilState::update(descriptor);
|
||||
if(!isEnabled()) {
|
||||
_mtlDepthStencilState = nil;
|
||||
return;
|
||||
}
|
||||
|
||||
auto key = hashValue();
|
||||
DepthStencilDescriptor hashMe;
|
||||
memset(&hashMe, 0, sizeof(hashMe));
|
||||
hashMe.depthCompareFunction = dsDesc.depthCompareFunction;
|
||||
hashMe.backFaceStencil = dsDesc.backFaceStencil;
|
||||
hashMe.frontFaceStencil = dsDesc.frontFaceStencil;
|
||||
hashMe.flags = dsDesc.flags;
|
||||
|
||||
auto key = XXH32((const void*)&hashMe, sizeof(hashMe), 0);
|
||||
auto it = _mtlStateCache.find(key);
|
||||
if(it != _mtlStateCache.end()) {
|
||||
_mtlDepthStencilState = it->second;
|
||||
|
@ -140,17 +134,17 @@ void DepthStencilStateMTL::update(const DepthStencilDescriptor& descriptor)
|
|||
|
||||
MTLDepthStencilDescriptor* mtlDescriptor = [[MTLDepthStencilDescriptor alloc] init];
|
||||
|
||||
if (bitmask::any(descriptor.depthStencilFlags, TargetBufferFlags::DEPTH))
|
||||
mtlDescriptor.depthCompareFunction = toMTLCompareFunction(descriptor.depthCompareFunction);
|
||||
if (bitmask::any(dsDesc.flags, DepthStencilFlags::DEPTH_TEST))
|
||||
mtlDescriptor.depthCompareFunction = toMTLCompareFunction(_depthStencilInfo.depthCompareFunction);
|
||||
else
|
||||
mtlDescriptor.depthCompareFunction = MTLCompareFunctionAlways;
|
||||
|
||||
mtlDescriptor.depthWriteEnabled = descriptor.depthWriteEnabled;
|
||||
mtlDescriptor.depthWriteEnabled = bitmask::any(dsDesc.flags, DepthStencilFlags::DEPTH_WRITE);
|
||||
|
||||
if (bitmask::any(descriptor.depthStencilFlags, TargetBufferFlags::STENCIL))
|
||||
if (bitmask::any(dsDesc.flags, DepthStencilFlags::STENCIL_TEST))
|
||||
{
|
||||
setMTLStencilDescriptor(mtlDescriptor.frontFaceStencil, descriptor.frontFaceStencil);
|
||||
setMTLStencilDescriptor(mtlDescriptor.backFaceStencil, descriptor.backFaceStencil);
|
||||
setMTLStencilDescriptor(mtlDescriptor.frontFaceStencil, _depthStencilInfo.frontFaceStencil);
|
||||
setMTLStencilDescriptor(mtlDescriptor.backFaceStencil, _depthStencilInfo.backFaceStencil);
|
||||
}
|
||||
|
||||
_mtlDepthStencilState = [_mtlDevice newDepthStencilStateWithDescriptor:mtlDescriptor];
|
||||
|
|
|
@ -297,16 +297,22 @@ void RenderPipelineMTL::chooseAttachmentFormat(const RenderTarget* renderTarget,
|
|||
PixelFormat& depthFormat,
|
||||
PixelFormat& stencilFormat)
|
||||
{
|
||||
// choose color attachment format
|
||||
// Choose color attachment format
|
||||
auto rtMTL = static_cast<const RenderTargetMTL*>(renderTarget);
|
||||
auto rtflags = rtMTL->getTargetFlags();
|
||||
for(auto i = 0; i < MAX_COLOR_ATTCHMENT; ++i) {
|
||||
colorAttachmentsFormat[i] = bitmask::any(rtflags, getMRTColorFlag(i)) ? rtMTL->getColorAttachmentPixelFormat(i) : PixelFormat::NONE;
|
||||
}
|
||||
|
||||
// choose depth and stencil attachment format, match RenderTargetMTL::applyRenderPassAttachments
|
||||
depthFormat = bitmask::any(rtflags, RenderTargetFlag::DEPTH) ? rtMTL->getDepthAttachmentPixelFormat() : PixelFormat::NONE;
|
||||
stencilFormat = bitmask::any(rtflags, RenderTargetFlag::STENCIL) ? rtMTL->getStencilAttachmentPixelFormat() : PixelFormat::NONE;
|
||||
if (bitmask::any(rtflags, RenderTargetFlag::DEPTH_AND_STENCIL))
|
||||
{
|
||||
depthFormat = rtMTL->getDepthAttachmentPixelFormat();
|
||||
stencilFormat =rtMTL->getStencilAttachmentPixelFormat();
|
||||
}
|
||||
else
|
||||
{
|
||||
depthFormat = stencilFormat = PixelFormat::NONE;
|
||||
}
|
||||
}
|
||||
|
||||
void RenderPipelineMTL::setBlendStateAndFormat(const BlendDescriptor& blendDescriptor)
|
||||
|
|
|
@ -28,7 +28,7 @@ public:
|
|||
void setDepthAttachment(TextureBackend* attachment, int level = 0) override;
|
||||
void setStencilAttachment(TextureBackend* attachment, int level = 0) override;
|
||||
|
||||
void applyRenderPassAttachments(const RenderPassParams& parmas, MTLRenderPassDescriptor* descriptor) const;
|
||||
void applyRenderPassAttachments(const RenderPassDescriptor&, MTLRenderPassDescriptor*) const;
|
||||
|
||||
Attachment getColorAttachment(int index) const;
|
||||
Attachment getDepthAttachment() const;
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
|
||||
CC_BACKEND_BEGIN
|
||||
|
||||
static MTLLoadAction getLoadAction(const RenderPassParams& params,
|
||||
static MTLLoadAction getLoadAction(const RenderPassDescriptor& params,
|
||||
TargetBufferFlags buffer) {
|
||||
const auto clearFlags = (TargetBufferFlags) params.flags.clear;
|
||||
const auto discardStartFlags = params.flags.discardStart;
|
||||
|
@ -15,7 +15,7 @@ static MTLLoadAction getLoadAction(const RenderPassParams& params,
|
|||
return MTLLoadActionLoad;
|
||||
}
|
||||
|
||||
static MTLStoreAction getStoreAction(const RenderPassParams& params,
|
||||
static MTLStoreAction getStoreAction(const RenderPassDescriptor& params,
|
||||
TargetBufferFlags buffer) {
|
||||
const auto discardEndFlags = params.flags.discardEnd;
|
||||
if (bitmask::any(discardEndFlags, buffer)) {
|
||||
|
@ -59,9 +59,10 @@ void RenderTargetMTL::setStencilAttachment(TextureBackend* attachment, int level
|
|||
|
||||
}
|
||||
|
||||
void RenderTargetMTL::applyRenderPassAttachments(const RenderPassParams& params, MTLRenderPassDescriptor* descriptor) const
|
||||
void RenderTargetMTL::applyRenderPassAttachments(const RenderPassDescriptor& params, MTLRenderPassDescriptor* descriptor) const
|
||||
{
|
||||
const auto discardFlags = params.flags.discardEnd;
|
||||
// const auto discardFlags = params.flags.discardEnd;
|
||||
auto clearFlags = params.flags.clear;
|
||||
|
||||
for (size_t i = 0; i < MAX_COLOR_ATTCHMENT; i++) {
|
||||
auto attachment = getColorAttachment(i);
|
||||
|
@ -69,12 +70,15 @@ void RenderTargetMTL::applyRenderPassAttachments(const RenderPassParams& params,
|
|||
continue;
|
||||
}
|
||||
|
||||
const auto MRTColorFlag = getMRTColorFlag(i);
|
||||
|
||||
descriptor.colorAttachments[i].texture = attachment.texture;
|
||||
descriptor.colorAttachments[i].level = attachment.level;
|
||||
// descriptor.colorAttachments[i].slice = attachment.layer;
|
||||
descriptor.colorAttachments[i].loadAction = getLoadAction(params, getMRTColorFlag(i));
|
||||
descriptor.colorAttachments[i].storeAction = getStoreAction(params, getMRTColorFlag(i));
|
||||
descriptor.colorAttachments[i].clearColor = MTLClearColorMake(
|
||||
descriptor.colorAttachments[i].loadAction = getLoadAction(params, MRTColorFlag);
|
||||
descriptor.colorAttachments[i].storeAction = getStoreAction(params,MRTColorFlag);
|
||||
if(bitmask::any(clearFlags, MRTColorFlag))
|
||||
descriptor.colorAttachments[i].clearColor = MTLClearColorMake(
|
||||
params.clearColorValue[0], params.clearColorValue[1], params.clearColorValue[2], params.clearColorValue[3]);
|
||||
#if 0
|
||||
if (multisampledColor[i]) {
|
||||
|
@ -97,7 +101,7 @@ void RenderTargetMTL::applyRenderPassAttachments(const RenderPassParams& params,
|
|||
}
|
||||
|
||||
// Sets descriptor depth and stencil params, should match RenderTargetMTL::chooseAttachmentFormat
|
||||
if(bitmask::any(this->_flags, RenderTargetFlag::DEPTH)) {
|
||||
if(bitmask::any(this->_flags, RenderTargetFlag::DEPTH_AND_STENCIL)) {
|
||||
auto depthAttachment = getDepthAttachment();
|
||||
if(depthAttachment){
|
||||
descriptor.depthAttachment.texture = depthAttachment.texture;
|
||||
|
@ -105,11 +109,10 @@ void RenderTargetMTL::applyRenderPassAttachments(const RenderPassParams& params,
|
|||
// descriptor.depthAttachment.slice = depthAttachment.layer;
|
||||
descriptor.depthAttachment.loadAction = getLoadAction(params, TargetBufferFlags::DEPTH);
|
||||
descriptor.depthAttachment.storeAction = getStoreAction(params, TargetBufferFlags::DEPTH);
|
||||
descriptor.depthAttachment.clearDepth = params.clearDepthValue;
|
||||
if(bitmask::any(clearFlags, TargetBufferFlags::DEPTH))
|
||||
descriptor.depthAttachment.clearDepth = params.clearDepthValue;
|
||||
}
|
||||
}
|
||||
|
||||
if(bitmask::any(this->_flags, RenderTargetFlag::STENCIL)) {
|
||||
|
||||
auto stencilAttachment = getStencilAttachment();
|
||||
if(stencilAttachment) {
|
||||
descriptor.stencilAttachment.texture = stencilAttachment.texture;
|
||||
|
@ -117,10 +120,11 @@ void RenderTargetMTL::applyRenderPassAttachments(const RenderPassParams& params,
|
|||
// descriptor.stencilAttachment.slice = depthAttachment.layer;
|
||||
descriptor.stencilAttachment.loadAction = getLoadAction(params, TargetBufferFlags::STENCIL);
|
||||
descriptor.stencilAttachment.storeAction = getStoreAction(params, TargetBufferFlags::STENCIL);
|
||||
descriptor.stencilAttachment.clearStencil = params.clearStencilValue;
|
||||
if(bitmask::any(clearFlags, TargetBufferFlags::STENCIL))
|
||||
descriptor.stencilAttachment.clearStencil = params.clearStencilValue;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#if 0
|
||||
if (multisampledDepth) {
|
||||
// We're rendering into our temporary MSAA texture and doing an automatic resolve.
|
||||
|
@ -177,7 +181,7 @@ PixelFormat RenderTargetMTL::getColorAttachmentPixelFormat(int index) const
|
|||
|
||||
PixelFormat RenderTargetMTL::getDepthAttachmentPixelFormat() const
|
||||
{ // FIXME: engine-x only support D24S8
|
||||
if(bitmask::any(_flags, TargetBufferFlags::DEPTH)) {
|
||||
if(bitmask::any(_flags, TargetBufferFlags::DEPTH_AND_STENCIL)) {
|
||||
if(isDefaultRenderTarget() || !_depth)
|
||||
return PixelFormat::D24S8;
|
||||
return _depth.texture->getTextureFormat();
|
||||
|
@ -187,7 +191,7 @@ PixelFormat RenderTargetMTL::getDepthAttachmentPixelFormat() const
|
|||
|
||||
PixelFormat RenderTargetMTL::getStencilAttachmentPixelFormat() const
|
||||
{ // FIXME: engine-x only support D24S8
|
||||
if(bitmask::any(_flags, TargetBufferFlags::STENCIL)) {
|
||||
if(bitmask::any(_flags, TargetBufferFlags::DEPTH_AND_STENCIL)) {
|
||||
if(isDefaultRenderTarget() || !_stencil)
|
||||
return PixelFormat::D24S8;
|
||||
return _stencil.texture->getTextureFormat();
|
||||
|
|
|
@ -66,11 +66,12 @@ CommandBufferGL::~CommandBufferGL()
|
|||
cleanResources();
|
||||
}
|
||||
|
||||
void CommandBufferGL::beginFrame()
|
||||
bool CommandBufferGL::beginFrame()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
void CommandBufferGL::beginRenderPass(const RenderTarget* rt, const RenderPassParams& descirptor)
|
||||
void CommandBufferGL::beginRenderPass(const RenderTarget* rt, const RenderPassDescriptor& descirptor)
|
||||
{
|
||||
auto rtGL = static_cast<const RenderTargetGL*>(rt);
|
||||
|
||||
|
@ -227,6 +228,8 @@ void CommandBufferGL::drawElements(PrimitiveType primitiveType, IndexFormat inde
|
|||
|
||||
void CommandBufferGL::endRenderPass()
|
||||
{
|
||||
CC_SAFE_RELEASE_NULL(_indexBuffer);
|
||||
CC_SAFE_RELEASE_NULL(_vertexBuffer);
|
||||
}
|
||||
|
||||
void CommandBufferGL::endFrame()
|
||||
|
@ -436,9 +439,7 @@ void CommandBufferGL::setUniform(bool isArray, GLuint location, unsigned int siz
|
|||
|
||||
void CommandBufferGL::cleanResources()
|
||||
{
|
||||
CC_SAFE_RELEASE_NULL(_indexBuffer);
|
||||
CC_SAFE_RELEASE_NULL(_programState);
|
||||
CC_SAFE_RELEASE_NULL(_vertexBuffer);
|
||||
}
|
||||
|
||||
void CommandBufferGL::setLineWidth(float lineWidth)
|
||||
|
|
|
@ -70,13 +70,13 @@ public:
|
|||
/**
|
||||
* @brief Indicate the begining of a frame
|
||||
*/
|
||||
virtual void beginFrame() override;
|
||||
virtual bool beginFrame() override;
|
||||
|
||||
/**
|
||||
* Begin a render pass, initial color, depth and stencil attachment.
|
||||
* @param descriptor Specifies a group of render targets that hold the results of a render pass.
|
||||
*/
|
||||
virtual void beginRenderPass(const RenderTarget* rt, const RenderPassParams& descriptor) override;
|
||||
virtual void beginRenderPass(const RenderTarget* rt, const RenderPassDescriptor& descriptor) override;
|
||||
|
||||
/**
|
||||
* Update depthStencil status, improvment: for metal backend cache it
|
||||
|
|
|
@ -38,8 +38,9 @@ void DepthStencilStateGL::reset()
|
|||
|
||||
void DepthStencilStateGL::apply(unsigned int stencilReferenceValueFront, unsigned int stencilReferenceValueBack) const
|
||||
{
|
||||
const auto dsFlags = _depthStencilInfo.flags;
|
||||
// depth test
|
||||
if (bitmask::any(_depthStencilInfo.depthStencilFlags, TargetBufferFlags::DEPTH))
|
||||
if (bitmask::any(dsFlags, DepthStencilFlags::DEPTH_TEST))
|
||||
{
|
||||
glEnable(GL_DEPTH_TEST);
|
||||
}
|
||||
|
@ -48,7 +49,7 @@ void DepthStencilStateGL::apply(unsigned int stencilReferenceValueFront, unsigne
|
|||
glDisable(GL_DEPTH_TEST);
|
||||
}
|
||||
|
||||
if (_depthStencilInfo.depthWriteEnabled)
|
||||
if (bitmask::any(dsFlags, DepthStencilFlags::DEPTH_WRITE))
|
||||
glDepthMask(GL_TRUE);
|
||||
else
|
||||
glDepthMask(GL_FALSE);
|
||||
|
@ -56,7 +57,7 @@ void DepthStencilStateGL::apply(unsigned int stencilReferenceValueFront, unsigne
|
|||
glDepthFunc(UtilsGL::toGLComareFunction(_depthStencilInfo.depthCompareFunction));
|
||||
|
||||
// stencil test
|
||||
if (bitmask::any(_depthStencilInfo.depthStencilFlags, TargetBufferFlags::STENCIL)) {
|
||||
if (bitmask::any(dsFlags, DepthStencilFlags::STENCIL_TEST)) {
|
||||
glEnable(GL_STENCIL_TEST);
|
||||
|
||||
if (_isBackFrontStencilEqual)
|
||||
|
|
|
@ -864,6 +864,15 @@ void EditBox::keyboardDidHide(IMEKeyboardNotificationInfo& /*info*/)
|
|||
|
||||
}
|
||||
|
||||
void EditBox::setGlobalZOrder(float globalZOrder)
|
||||
{
|
||||
Widget::setGlobalZOrder(globalZOrder);
|
||||
if (_editBoxImpl)
|
||||
{
|
||||
_editBoxImpl->setGlobalZOrder(globalZOrder);
|
||||
}
|
||||
}
|
||||
|
||||
#if CC_ENABLE_SCRIPT_BINDING
|
||||
void EditBox::registerScriptEditBoxHandler(int handler)
|
||||
{
|
||||
|
|
|
@ -648,6 +648,8 @@ namespace ui {
|
|||
*/
|
||||
virtual void keyboardDidHide(IMEKeyboardNotificationInfo& info) override;
|
||||
|
||||
void setGlobalZOrder(float globalZOrder) override;
|
||||
|
||||
void openKeyboard() const;
|
||||
|
||||
protected:
|
||||
|
|
|
@ -96,12 +96,14 @@ void EditBoxImplCommon::initInactiveLabels(const Size& size)
|
|||
_label->setAnchorPoint(Vec2(0.0f,1.0f));
|
||||
_label->setOverflow(Label::Overflow::CLAMP);
|
||||
_label->setVisible(false);
|
||||
_label->setGlobalZOrder(_editBox->getGlobalZOrder());
|
||||
_editBox->addChild(_label, kLabelZOrder);
|
||||
|
||||
_labelPlaceHolder = Label::create();
|
||||
_labelPlaceHolder->setAnchorPoint(Vec2(0.0f, 1.0f));
|
||||
_labelPlaceHolder->setTextColor(Color4B::GRAY);
|
||||
_labelPlaceHolder->enableWrap(false);
|
||||
_labelPlaceHolder->setGlobalZOrder(_editBox->getGlobalZOrder());
|
||||
_editBox->addChild(_labelPlaceHolder, kLabelZOrder);
|
||||
|
||||
setFont(pDefaultFontName, size.height*2/3);
|
||||
|
@ -291,6 +293,19 @@ void EditBoxImplCommon::setContentSize(const Size& size)
|
|||
placeInactiveLabels(_contentSize);
|
||||
}
|
||||
|
||||
void EditBoxImplCommon::setGlobalZOrder(float globalZOrder)
|
||||
{
|
||||
if (_label)
|
||||
{
|
||||
_label->setGlobalZOrder(globalZOrder);
|
||||
}
|
||||
|
||||
if (_labelPlaceHolder)
|
||||
{
|
||||
_labelPlaceHolder->setGlobalZOrder(globalZOrder);
|
||||
}
|
||||
}
|
||||
|
||||
void EditBoxImplCommon::draw(Renderer* /*renderer*/, const Mat4& /*transform*/, uint32_t flags)
|
||||
{
|
||||
if(flags)
|
||||
|
|
|
@ -91,6 +91,7 @@ public:
|
|||
|
||||
virtual void setAnchorPoint(const Vec2& anchorPoint) override {}
|
||||
virtual void setPosition(const Vec2& pos) override {}
|
||||
virtual void setGlobalZOrder(float globalZOrder) override;
|
||||
|
||||
/**
|
||||
* @js NA
|
||||
|
|
|
@ -86,7 +86,9 @@ namespace cocos2d {
|
|||
virtual void setVisible(bool visible) = 0;
|
||||
virtual void setContentSize(const Size& size) = 0;
|
||||
virtual void setAnchorPoint(const Vec2& anchorPoint) = 0;
|
||||
|
||||
|
||||
virtual void setGlobalZOrder(float globalZOrder) = 0;
|
||||
|
||||
/**
|
||||
* check the editbox's position, update it when needed
|
||||
*/
|
||||
|
|
|
@ -241,10 +241,8 @@ void Layout::stencilClippingVisit(Renderer *renderer, const Mat4& parentTransfor
|
|||
// IMPORTANT:
|
||||
// To ease the migration to v3.0, we still support the Mat4 stack,
|
||||
// but it is deprecated and your code should not rely on it
|
||||
Director* director = Director::getInstance();
|
||||
CCASSERT(nullptr != director, "Director is null when setting matrix stack");
|
||||
director->pushMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW);
|
||||
director->loadMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW, _modelViewTransform);
|
||||
_director->pushMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW);
|
||||
_director->loadMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW, _modelViewTransform);
|
||||
//Add group command
|
||||
|
||||
_groupCommand.init(_globalZOrder);
|
||||
|
@ -313,17 +311,17 @@ void Layout::stencilClippingVisit(Renderer *renderer, const Mat4& parentTransfor
|
|||
|
||||
renderer->popGroup();
|
||||
|
||||
director->popMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW);
|
||||
_director->popMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW);
|
||||
}
|
||||
|
||||
void Layout::onBeforeVisitScissor()
|
||||
{
|
||||
auto glview = Director::getInstance()->getOpenGLView();
|
||||
auto glview = _director->getOpenGLView();
|
||||
// apply scissor test
|
||||
_scissorOldState = glview->isScissorEnabled();
|
||||
if (false == _scissorOldState)
|
||||
{
|
||||
auto renderer = Director::getInstance()->getRenderer();
|
||||
auto renderer = _director->getRenderer();
|
||||
renderer->setScissorTest(true);
|
||||
}
|
||||
|
||||
|
@ -346,7 +344,7 @@ void Layout::onAfterVisitScissor()
|
|||
// revert scissor box
|
||||
if (false == _clippingOldRect.equals(_clippingRect))
|
||||
{
|
||||
auto glview = Director::getInstance()->getOpenGLView();
|
||||
auto glview = _director->getOpenGLView();
|
||||
glview->setScissorInPoints(_clippingOldRect.origin.x,
|
||||
_clippingOldRect.origin.y,
|
||||
_clippingOldRect.size.width,
|
||||
|
@ -356,7 +354,7 @@ void Layout::onAfterVisitScissor()
|
|||
else
|
||||
{
|
||||
// revert scissor test
|
||||
auto renderer = Director::getInstance()->getRenderer();
|
||||
auto renderer = _director->getRenderer();
|
||||
renderer->setScissorTest(false);
|
||||
}
|
||||
}
|
||||
|
@ -368,10 +366,8 @@ void Layout::scissorClippingVisit(Renderer *renderer, const Mat4& parentTransfor
|
|||
_clippingRectDirty = true;
|
||||
}
|
||||
|
||||
Director* director = Director::getInstance();
|
||||
CCASSERT(nullptr != director, "Director is null when setting matrix stack");
|
||||
director->pushMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW);
|
||||
director->loadMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW, _modelViewTransform);
|
||||
_director->pushMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW);
|
||||
_director->loadMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW, _modelViewTransform);
|
||||
|
||||
_groupCommand.init(_globalZOrder);
|
||||
renderer->addCommand(&_groupCommand);
|
||||
|
@ -388,7 +384,7 @@ void Layout::scissorClippingVisit(Renderer *renderer, const Mat4& parentTransfor
|
|||
renderer->addCommand(&_afterVisitCmdScissor);
|
||||
|
||||
renderer->popGroup();
|
||||
director->popMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW);
|
||||
_director->popMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW);
|
||||
}
|
||||
|
||||
void Layout::setClippingEnabled(bool able)
|
||||
|
@ -632,6 +628,7 @@ void Layout::supplyTheLayoutParameterLackToChild(Widget *child)
|
|||
break;
|
||||
case Type::HORIZONTAL:
|
||||
case Type::VERTICAL:
|
||||
case Type::CENTER_VERTICAL:
|
||||
{
|
||||
LinearLayoutParameter* layoutParameter = dynamic_cast<LinearLayoutParameter*>(child->getLayoutParameter());
|
||||
if (!layoutParameter)
|
||||
|
@ -922,6 +919,9 @@ LayoutManager* Layout::createLayoutManager()
|
|||
case Type::VERTICAL:
|
||||
exe = LinearVerticalLayoutManager::create();
|
||||
break;
|
||||
case Type::CENTER_VERTICAL:
|
||||
exe = LinearCenterVerticalLayoutManager::create();
|
||||
break;
|
||||
case Type::HORIZONTAL:
|
||||
exe = LinearHorizontalLayoutManager::create();
|
||||
break;
|
||||
|
@ -1043,7 +1043,7 @@ Size Layout::getLayoutAccumulatedSize()const
|
|||
{
|
||||
layoutSize = layoutSize - Size(0, layoutSize.height/widgetCount * (widgetCount-1));
|
||||
}
|
||||
if (type == Type::VERTICAL)
|
||||
if (type == Type::VERTICAL || type == Type::CENTER_VERTICAL)
|
||||
{
|
||||
layoutSize = layoutSize - Size(layoutSize.width/widgetCount * (widgetCount-1), 0);
|
||||
}
|
||||
|
@ -1634,7 +1634,8 @@ bool Layout::isLastWidgetInContainer(Widget* widget, FocusDirection direction)c
|
|||
|
||||
auto& container = parent->getChildren();
|
||||
ssize_t index = container.getIndex(widget);
|
||||
if (parent->getLayoutType() == Type::HORIZONTAL)
|
||||
const auto parentLayoutType = parent->getLayoutType();
|
||||
if (parentLayoutType == Type::HORIZONTAL)
|
||||
{
|
||||
if (direction == FocusDirection::LEFT)
|
||||
{
|
||||
|
@ -1668,7 +1669,7 @@ bool Layout::isLastWidgetInContainer(Widget* widget, FocusDirection direction)c
|
|||
return isLastWidgetInContainer(parent, direction);
|
||||
}
|
||||
}
|
||||
else if(parent->getLayoutType() == Type::VERTICAL)
|
||||
else if (parentLayoutType == Type::VERTICAL || parentLayoutType == Type::CENTER_VERTICAL)
|
||||
{
|
||||
if (direction == FocusDirection::UP)
|
||||
{
|
||||
|
@ -1721,7 +1722,7 @@ bool Layout::isWidgetAncestorSupportLoopFocus(Widget* widget, FocusDirection di
|
|||
}
|
||||
if (parent->isLoopFocus())
|
||||
{
|
||||
auto layoutType = parent->getLayoutType();
|
||||
const auto layoutType = parent->getLayoutType();
|
||||
if (layoutType == Type::HORIZONTAL)
|
||||
{
|
||||
if (direction == FocusDirection::LEFT || direction == FocusDirection::RIGHT)
|
||||
|
@ -1733,7 +1734,7 @@ bool Layout::isWidgetAncestorSupportLoopFocus(Widget* widget, FocusDirection di
|
|||
return isWidgetAncestorSupportLoopFocus(parent, direction);
|
||||
}
|
||||
}
|
||||
if (layoutType == Type::VERTICAL)
|
||||
if (layoutType == Type::VERTICAL || layoutType == Type::CENTER_VERTICAL)
|
||||
{
|
||||
if (direction == FocusDirection::DOWN || direction == FocusDirection::UP)
|
||||
{
|
||||
|
@ -1823,7 +1824,7 @@ Widget* Layout::findNextFocusedWidget(FocusDirection direction, Widget* current)
|
|||
break;
|
||||
}
|
||||
}
|
||||
else if (_layoutType == Type::VERTICAL)
|
||||
else if (_layoutType == Type::VERTICAL || _layoutType == Type::CENTER_VERTICAL)
|
||||
{
|
||||
switch (direction)
|
||||
{
|
||||
|
|
|
@ -120,6 +120,7 @@ public:
|
|||
{
|
||||
ABSOLUTE,
|
||||
VERTICAL,
|
||||
CENTER_VERTICAL,
|
||||
HORIZONTAL,
|
||||
RELATIVE
|
||||
};
|
||||
|
|
|
@ -85,7 +85,6 @@ void LinearHorizontalLayoutManager::doLayout(LayoutProtocol* layout)
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
//LinearVerticalLayoutManager
|
||||
LinearVerticalLayoutManager* LinearVerticalLayoutManager::create()
|
||||
{
|
||||
|
@ -142,7 +141,83 @@ void LinearVerticalLayoutManager::doLayout(LayoutProtocol* layout)
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
//LinearCenterVerticalLayoutManager
|
||||
LinearCenterVerticalLayoutManager* LinearCenterVerticalLayoutManager::create()
|
||||
{
|
||||
auto* exe = new (std::nothrow) LinearCenterVerticalLayoutManager();
|
||||
if (exe)
|
||||
{
|
||||
exe->autorelease();
|
||||
return exe;
|
||||
}
|
||||
CC_SAFE_DELETE(exe);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
void LinearCenterVerticalLayoutManager::doLayout(LayoutProtocol* layout)
|
||||
{
|
||||
const auto layoutSize = layout->getLayoutContentSize();
|
||||
auto&& container = layout->getLayoutElements();
|
||||
auto topBoundary = layoutSize.height;
|
||||
|
||||
auto totalHeight = 0.f;
|
||||
// need to get total sub-widget height
|
||||
for (auto&& subWidget : container)
|
||||
{
|
||||
auto* child = dynamic_cast<LayoutParameterProtocol*>(subWidget);
|
||||
if (child)
|
||||
{
|
||||
auto* layoutParameter = dynamic_cast<LinearLayoutParameter*>(child->getLayoutParameter());
|
||||
if (layoutParameter)
|
||||
{
|
||||
auto&& mg = layoutParameter->getMargin();
|
||||
totalHeight += subWidget->getBoundingBox().size.height + mg.top + mg.bottom;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
topBoundary = topBoundary - (topBoundary - totalHeight) / 2.f;
|
||||
|
||||
for (auto&& subWidget : container)
|
||||
{
|
||||
auto* child = dynamic_cast<LayoutParameterProtocol*>(subWidget);
|
||||
if (child)
|
||||
{
|
||||
auto* layoutParameter = dynamic_cast<LinearLayoutParameter*>(child->getLayoutParameter());
|
||||
|
||||
if (layoutParameter)
|
||||
{
|
||||
const auto childGravity = layoutParameter->getGravity();
|
||||
const auto ap = subWidget->getAnchorPoint();
|
||||
const auto cs = subWidget->getBoundingBox().size;
|
||||
auto finalPosX = ap.x * cs.width;
|
||||
auto finalPosY = topBoundary - ((1.0f - ap.y) * cs.height);
|
||||
switch (childGravity)
|
||||
{
|
||||
case LinearLayoutParameter::LinearGravity::NONE:
|
||||
case LinearLayoutParameter::LinearGravity::LEFT:
|
||||
break;
|
||||
case LinearLayoutParameter::LinearGravity::RIGHT:
|
||||
finalPosX = layoutSize.width - ((1.0f - ap.x) * cs.width);
|
||||
break;
|
||||
case LinearLayoutParameter::LinearGravity::CENTER_HORIZONTAL:
|
||||
finalPosX = layoutSize.width / 2.0f - cs.width * (0.5f - ap.x);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
auto&& mg = layoutParameter->getMargin();
|
||||
finalPosX += mg.left;
|
||||
finalPosY -= mg.top;
|
||||
subWidget->setPosition(finalPosX, finalPosY);
|
||||
topBoundary = subWidget->getPosition().y - subWidget->getAnchorPoint().y * subWidget->getBoundingBox().size.height - mg.bottom;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//RelativeLayoutManager
|
||||
|
||||
RelativeLayoutManager* RelativeLayoutManager::create()
|
||||
|
|
|
@ -94,6 +94,23 @@ private:
|
|||
friend class Layout;
|
||||
};
|
||||
|
||||
/**
|
||||
*@brief Linear vertical layouting class.
|
||||
* Note: This class is used only by @see `Layout` class.
|
||||
* @lua NA
|
||||
* @js NA
|
||||
*/
|
||||
class CC_GUI_DLL LinearCenterVerticalLayoutManager : public LayoutManager
|
||||
{
|
||||
private:
|
||||
LinearCenterVerticalLayoutManager() {};
|
||||
virtual ~LinearCenterVerticalLayoutManager() {};
|
||||
static LinearCenterVerticalLayoutManager* create();
|
||||
virtual void doLayout(LayoutProtocol* layout) override;
|
||||
|
||||
friend class Layout;
|
||||
};
|
||||
|
||||
/**
|
||||
*@brief Relative layouting class.
|
||||
*Note: This class is used only by `Layout` class.
|
||||
|
|
|
@ -117,7 +117,7 @@ void ListView::updateInnerContainerSize()
|
|||
float totalHeight = (length == 0) ? 0.0f : (length - 1) * _itemsMargin + (_topPadding + _bottomPadding);
|
||||
for (auto& item : _items)
|
||||
{
|
||||
totalHeight += item->getContentSize().height;
|
||||
totalHeight += item->getContentSize().height * item->getScaleY();
|
||||
}
|
||||
float finalWidth = _contentSize.width;
|
||||
float finalHeight = totalHeight;
|
||||
|
@ -130,7 +130,7 @@ void ListView::updateInnerContainerSize()
|
|||
float totalWidth = (length == 0) ? 0.0f : (length - 1) * _itemsMargin + (_leftPadding + _rightPadding);
|
||||
for (auto& item : _items)
|
||||
{
|
||||
totalWidth += item->getContentSize().width;
|
||||
totalWidth += item->getContentSize().width * item->getScaleX();
|
||||
}
|
||||
float finalWidth = totalWidth;
|
||||
float finalHeight = _contentSize.height;
|
||||
|
|
|
@ -466,7 +466,7 @@ namespace ui {
|
|||
if (ret)
|
||||
{
|
||||
// open keyboard
|
||||
GLView * pGlView = Director::getInstance()->getOpenGLView();
|
||||
GLView * pGlView = _director->getOpenGLView();
|
||||
if (pGlView)
|
||||
{
|
||||
pGlView->setIMEKeyboardState(true);
|
||||
|
@ -481,7 +481,7 @@ namespace ui {
|
|||
if (ret)
|
||||
{
|
||||
// close keyboard
|
||||
GLView * glView = Director::getInstance()->getOpenGLView();
|
||||
GLView * glView = _director->getOpenGLView();
|
||||
if (glView)
|
||||
{
|
||||
glView->setIMEKeyboardState(false);
|
||||
|
|
|
@ -1371,7 +1371,7 @@ void Widget::dispatchFocusEvent(cocos2d::ui::Widget *widgetLoseFocus, cocos2d::u
|
|||
}
|
||||
|
||||
EventFocus event(widgetLoseFocus, widgetGetFocus);
|
||||
auto dispatcher = cocos2d::Director::getInstance()->getEventDispatcher();
|
||||
auto dispatcher = _director->getEventDispatcher();
|
||||
dispatcher->dispatchEvent(&event);
|
||||
}
|
||||
|
||||
|
|
|
@ -48,7 +48,7 @@ function(setup_cocos_extension_config target_name)
|
|||
PROPERTIES
|
||||
ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib"
|
||||
LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib"
|
||||
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib"
|
||||
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin"
|
||||
FOLDER "Extensions"
|
||||
)
|
||||
|
||||
|
|
|
@ -30,6 +30,9 @@
|
|||
// Physics integration
|
||||
#include "physics-nodes/CCPhysicsDebugNode.h"
|
||||
#include "physics-nodes/CCPhysicsSprite.h"
|
||||
#include "physics-nodes/CCPhysicsSpriteBox2D.h"
|
||||
#include "physics-nodes/CCPhysicsSpriteChipmunk2D.h"
|
||||
|
||||
|
||||
#include "assets-manager/AssetsManager.h"
|
||||
#include "assets-manager/AssetsManagerEx.h"
|
||||
|
|
|
@ -208,14 +208,12 @@ void GUIReader::registerTypeAndCallBack(const std::string& classType,
|
|||
|
||||
Widget* GUIReader::widgetFromJsonFile(const char *fileName)
|
||||
{
|
||||
auto thiz = GUIReader::getInstance();
|
||||
|
||||
std::string jsonpath;
|
||||
rapidjson::Document jsonDict;
|
||||
jsonpath = fileName;
|
||||
// jsonpath = CCFileUtils::getInstance()->fullPathForFilename(fileName);
|
||||
size_t pos = jsonpath.find_last_of('/');
|
||||
thiz->m_strFilePath = jsonpath.substr(0,pos+1);
|
||||
m_strFilePath = jsonpath.substr(0,pos+1);
|
||||
std::string contentStr = FileUtils::getInstance()->getStringFromFile(jsonpath);
|
||||
jsonDict.Parse<0>(contentStr.c_str());
|
||||
if (jsonDict.HasParseError())
|
||||
|
@ -227,22 +225,22 @@ Widget* GUIReader::widgetFromJsonFile(const char *fileName)
|
|||
WidgetPropertiesReader * pReader = nullptr;
|
||||
if (fileVersion)
|
||||
{
|
||||
int versionInteger = thiz->getVersionInteger(fileVersion);
|
||||
int versionInteger = this->getVersionInteger(fileVersion);
|
||||
if (versionInteger < 250)
|
||||
{
|
||||
pReader = new (std::nothrow) WidgetPropertiesReader0250();
|
||||
widget = pReader->createWidget(jsonDict, thiz->m_strFilePath.c_str(), fileName);
|
||||
widget = pReader->createWidget(jsonDict, this->m_strFilePath.c_str(), fileName);
|
||||
}
|
||||
else
|
||||
{
|
||||
pReader = new (std::nothrow) WidgetPropertiesReader0300();
|
||||
widget = pReader->createWidget(jsonDict, thiz->m_strFilePath.c_str(), fileName);
|
||||
widget = pReader->createWidget(jsonDict, this->m_strFilePath.c_str(), fileName);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
pReader = new (std::nothrow) WidgetPropertiesReader0250();
|
||||
widget = pReader->createWidget(jsonDict, thiz->m_strFilePath.c_str(), fileName);
|
||||
widget = pReader->createWidget(jsonDict, this->m_strFilePath.c_str(), fileName);
|
||||
}
|
||||
|
||||
CC_SAFE_DELETE(pReader);
|
||||
|
@ -366,14 +364,12 @@ WidgetReaderProtocol* WidgetPropertiesReader::createWidgetReaderProtocol(const s
|
|||
|
||||
Widget* GUIReader::widgetFromBinaryFile(const char *fileName)
|
||||
{
|
||||
auto thiz = GUIReader::getInstance();
|
||||
|
||||
std::string jsonpath;
|
||||
rapidjson::Document jsonDict;
|
||||
jsonpath = fileName;
|
||||
// jsonpath = CCFileUtils::getInstance()->fullPathForFilename(fileName);
|
||||
size_t pos = jsonpath.find_last_of('/');
|
||||
thiz->m_strFilePath = jsonpath.substr(0,pos+1);
|
||||
m_strFilePath = jsonpath.substr(0,pos+1);
|
||||
std::string fullPath = FileUtils::getInstance()->fullPathForFilename(fileName);
|
||||
auto fileData = FileUtils::getInstance()->getDataFromFile(fullPath);
|
||||
auto fileDataBytes = fileData.getBytes();
|
||||
|
@ -406,7 +402,7 @@ Widget* GUIReader::widgetFromBinaryFile(const char *fileName)
|
|||
WidgetPropertiesReader * pReader = nullptr;
|
||||
if (fileVersion)
|
||||
{
|
||||
int versionInteger = thiz->getVersionInteger(fileVersion);
|
||||
int versionInteger = this->getVersionInteger(fileVersion);
|
||||
if (versionInteger < 250)
|
||||
{
|
||||
CCASSERT(0, "You current studio doesn't support binary format, please upgrade to the latest version!");
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/****************************************************************************
|
||||
/****************************************************************************
|
||||
Copyright (c) 2013-2017 Chukong Technologies Inc.
|
||||
|
||||
http://www.cocos2d-x.org
|
||||
|
@ -62,9 +62,9 @@ public:
|
|||
static GUIReader* getInstance();
|
||||
static void destroyInstance();
|
||||
|
||||
static cocos2d::ui::Widget* widgetFromJsonFile(const char* fileName);
|
||||
cocos2d::ui::Widget* widgetFromJsonFile(const char* fileName);
|
||||
|
||||
static cocos2d::ui::Widget* widgetFromBinaryFile(const char* fileName);
|
||||
cocos2d::ui::Widget* widgetFromBinaryFile(const char* fileName);
|
||||
|
||||
int getVersionInteger(const char* str);
|
||||
/**
|
||||
|
|
|
@ -101,7 +101,7 @@ void FUISprite::setScaleByTile(bool value)
|
|||
void FUISprite::setGrayed(bool value)
|
||||
{
|
||||
#if defined(ENGINEX_VERSION)
|
||||
Sprite::setProgramState(backend::ProgramType::GRAY_SCALE);
|
||||
Sprite::setProgramState(value ? backend::ProgramType::GRAY_SCALE : backend::ProgramType::POSITION_TEXTURE_COLOR);
|
||||
#elif COCOS2D_VERSION >= 0x00040000
|
||||
auto isETC1 = getTexture() && getTexture()->getAlphaTextureName();
|
||||
if (value) {
|
||||
|
|
|
@ -22,9 +22,8 @@
|
|||
*/
|
||||
#include "CCPhysicsDebugNode.h"
|
||||
|
||||
#if CC_ENABLE_CHIPMUNK_INTEGRATION
|
||||
#include "chipmunk/chipmunk_private.h"
|
||||
#endif
|
||||
|
||||
|
||||
#include "base/ccTypes.h"
|
||||
#include "math/CCGeometry.h"
|
||||
|
@ -38,7 +37,6 @@
|
|||
|
||||
NS_CC_EXT_BEGIN
|
||||
|
||||
#if CC_ENABLE_CHIPMUNK_INTEGRATION
|
||||
/*
|
||||
IMPORTANT - READ ME!
|
||||
|
||||
|
@ -160,7 +158,7 @@ static void DrawConstraint(cpConstraint *constraint, DrawNode *renderer)
|
|||
// printf("Cannot draw constraint\n");
|
||||
}
|
||||
}
|
||||
#endif // #if CC_ENABLE_CHIPMUNK_INTEGRATION
|
||||
|
||||
|
||||
// implementation of PhysicsDebugNode
|
||||
|
||||
|
@ -170,7 +168,6 @@ void PhysicsDebugNode::draw(Renderer *renderer, const Mat4 &transform, uint32_t
|
|||
{
|
||||
return;
|
||||
}
|
||||
#if CC_ENABLE_CHIPMUNK_INTEGRATION
|
||||
// clear the shapes information before draw current shapes.
|
||||
DrawNode::clear();
|
||||
|
||||
|
@ -178,7 +175,6 @@ void PhysicsDebugNode::draw(Renderer *renderer, const Mat4 &transform, uint32_t
|
|||
cpSpaceEachConstraint(_spacePtr, (cpSpaceConstraintIteratorFunc)DrawConstraint, this);
|
||||
|
||||
DrawNode::draw(renderer, transform, flags);
|
||||
#endif
|
||||
}
|
||||
|
||||
PhysicsDebugNode::PhysicsDebugNode()
|
||||
|
@ -191,11 +187,7 @@ PhysicsDebugNode* PhysicsDebugNode::create(cpSpace *space)
|
|||
if (node)
|
||||
{
|
||||
node->init();
|
||||
#if CC_ENABLE_CHIPMUNK_INTEGRATION
|
||||
node->_spacePtr = space;
|
||||
#else
|
||||
CCASSERT(false, "CC_ENABLE_CHIPMUNK_INTEGRATION was not enabled!");
|
||||
#endif
|
||||
node->autorelease();
|
||||
}
|
||||
else
|
||||
|
@ -212,21 +204,12 @@ PhysicsDebugNode::~PhysicsDebugNode()
|
|||
|
||||
cpSpace* PhysicsDebugNode::getSpace() const
|
||||
{
|
||||
#if CC_ENABLE_CHIPMUNK_INTEGRATION
|
||||
return _spacePtr;
|
||||
#else
|
||||
CCASSERT(false, "Can't call chipmunk methods when Chipmunk is disabled");
|
||||
return nullptr;
|
||||
#endif
|
||||
}
|
||||
|
||||
void PhysicsDebugNode::setSpace(cpSpace *space)
|
||||
{
|
||||
#if CC_ENABLE_CHIPMUNK_INTEGRATION
|
||||
_spacePtr = space;
|
||||
#else
|
||||
CCASSERT(false, "Can't call chipmunk methods when Chipmunk is disabled");
|
||||
#endif
|
||||
}
|
||||
|
||||
NS_CC_EXT_END
|
||||
NS_CC_EXT_END
|
|
@ -27,9 +27,6 @@
|
|||
|
||||
#if (CC_ENABLE_CHIPMUNK_INTEGRATION || CC_ENABLE_BOX2D_INTEGRATION)
|
||||
|
||||
#if (CC_ENABLE_CHIPMUNK_INTEGRATION && CC_ENABLE_BOX2D_INTEGRATION)
|
||||
#error "Either Chipmunk or Box2d should be enabled, but not both at the same time"
|
||||
#endif
|
||||
|
||||
#if CC_ENABLE_CHIPMUNK_INTEGRATION
|
||||
#include "chipmunk/chipmunk.h"
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue