mirror of https://github.com/axmolengine/axmol.git
Merge branch 'v3' of github.com:cocos2d/cocos2d-x into v3_origin
This commit is contained in:
commit
d754900b28
|
@ -1,4 +1,6 @@
|
|||
cocos2d-x-3.4rc0 Jan.9 2015
|
||||
[FIX] GLProgram: when there is a shader compile error in shader, it will crash on windows
|
||||
[FIX] HttpClient: http requests will be lost in immediately mode on iOS
|
||||
[FIX] WP8: compiling error on ARM architecture
|
||||
|
||||
cocos2d-x-3.4beta0 Dec.31 2014
|
||||
|
|
|
@ -47,7 +47,7 @@
|
|||
using namespace cocos2d;
|
||||
using namespace cocos2d::experimental;
|
||||
|
||||
const int AudioEngine::INVAILD_AUDIO_ID = -1;
|
||||
const int AudioEngine::INVALID_AUDIO_ID = -1;
|
||||
const float AudioEngine::TIME_UNKNOWN = -1.0f;
|
||||
|
||||
//audio file path,audio IDs
|
||||
|
@ -85,7 +85,7 @@ bool AudioEngine::lazyInit()
|
|||
|
||||
int AudioEngine::play2d(const std::string& filePath, bool loop, float volume, const AudioProfile *profile)
|
||||
{
|
||||
int ret = AudioEngine::INVAILD_AUDIO_ID;
|
||||
int ret = AudioEngine::INVALID_AUDIO_ID;
|
||||
|
||||
do {
|
||||
if ( !lazyInit() ){
|
||||
|
@ -130,7 +130,7 @@ int AudioEngine::play2d(const std::string& filePath, bool loop, float volume, co
|
|||
}
|
||||
|
||||
ret = _audioEngineImpl->play2d(filePath, loop, volume);
|
||||
if (ret != INVAILD_AUDIO_ID)
|
||||
if (ret != INVALID_AUDIO_ID)
|
||||
{
|
||||
_audioPathIDMap[filePath].push_back(ret);
|
||||
auto it = _audioPathIDMap.find(filePath);
|
||||
|
|
|
@ -229,7 +229,7 @@ bool AudioEngineImpl::init()
|
|||
|
||||
int AudioEngineImpl::play2d(const std::string &filePath ,bool loop ,float volume)
|
||||
{
|
||||
auto audioId = AudioEngine::INVAILD_AUDIO_ID;
|
||||
auto audioId = AudioEngine::INVALID_AUDIO_ID;
|
||||
|
||||
do
|
||||
{
|
||||
|
|
|
@ -187,7 +187,7 @@ bool AudioEngineImpl::init()
|
|||
int AudioEngineImpl::play2d(const std::string &filePath ,bool loop ,float volume)
|
||||
{
|
||||
if (s_ALDevice == nullptr) {
|
||||
return AudioEngine::INVAILD_AUDIO_ID;
|
||||
return AudioEngine::INVALID_AUDIO_ID;
|
||||
}
|
||||
|
||||
bool sourceFlag = false;
|
||||
|
@ -201,7 +201,7 @@ int AudioEngineImpl::play2d(const std::string &filePath ,bool loop ,float volume
|
|||
}
|
||||
}
|
||||
if(!sourceFlag){
|
||||
return AudioEngine::INVAILD_AUDIO_ID;
|
||||
return AudioEngine::INVALID_AUDIO_ID;
|
||||
}
|
||||
|
||||
AudioCache* audioCache = nullptr;
|
||||
|
|
|
@ -81,7 +81,7 @@ public:
|
|||
PAUSED
|
||||
};
|
||||
|
||||
static const int INVAILD_AUDIO_ID;
|
||||
static const int INVALID_AUDIO_ID;
|
||||
|
||||
static const float TIME_UNKNOWN;
|
||||
|
||||
|
|
|
@ -205,7 +205,7 @@ int AudioEngineImpl::play2d(const std::string &filePath ,bool loop ,float volume
|
|||
}
|
||||
}
|
||||
if(!availableSourceExist){
|
||||
return AudioEngine::INVAILD_AUDIO_ID;
|
||||
return AudioEngine::INVALID_AUDIO_ID;
|
||||
}
|
||||
|
||||
AudioCache* audioCache = nullptr;
|
||||
|
@ -244,7 +244,7 @@ int AudioEngineImpl::play2d(const std::string &filePath ,bool loop ,float volume
|
|||
|
||||
if (eraseCache){
|
||||
_audioCaches.erase(filePath);
|
||||
return AudioEngine::INVAILD_AUDIO_ID;
|
||||
return AudioEngine::INVALID_AUDIO_ID;
|
||||
}
|
||||
|
||||
audioCache->_fileFullPath = FileUtils::getInstance()->fullPathForFilename(filePath);
|
||||
|
|
|
@ -43,8 +43,6 @@
|
|||
|
||||
NS_CC_BEGIN
|
||||
|
||||
#define ERROR_SIZE 256
|
||||
|
||||
namespace network {
|
||||
|
||||
static std::mutex s_requestQueueMutex;
|
||||
|
@ -55,10 +53,11 @@ static std::condition_variable_any s_SleepCondition;
|
|||
static Vector<HttpRequest*>* s_requestQueue = nullptr;
|
||||
static Vector<HttpResponse*>* s_responseQueue = nullptr;
|
||||
|
||||
static HttpClient *s_pHttpClient = nullptr; // pointer to singleton
|
||||
static HttpClient *s_HttpClient = nullptr; // pointer to singleton
|
||||
|
||||
static HttpAsynConnection *httpAsynConn = nullptr;
|
||||
static HttpCookie *s_cookie = nullptr;
|
||||
|
||||
static const int ERROR_SIZE = 256;
|
||||
|
||||
static char s_errorBuffer[ERROR_SIZE] = {0};
|
||||
|
||||
|
@ -106,7 +105,7 @@ void HttpClient::networkThread()
|
|||
s_responseQueue->pushBack(response);
|
||||
s_responseQueueMutex.unlock();
|
||||
|
||||
if (nullptr != s_pHttpClient) {
|
||||
if (nullptr != s_HttpClient) {
|
||||
scheduler->performFunctionInCocosThread(CC_CALLBACK_0(HttpClient::dispatchResponseCallbacks, this));
|
||||
}
|
||||
}
|
||||
|
@ -142,11 +141,11 @@ void HttpClient::networkThreadAlone(HttpRequest* request)
|
|||
|
||||
if (callback != nullptr)
|
||||
{
|
||||
callback(s_pHttpClient, response);
|
||||
callback(s_HttpClient, response);
|
||||
}
|
||||
else if (pTarget && pSelector)
|
||||
{
|
||||
(pTarget->*pSelector)(s_pHttpClient, response);
|
||||
(pTarget->*pSelector)(s_HttpClient, response);
|
||||
}
|
||||
response->release();
|
||||
// do not release in other thread
|
||||
|
@ -218,7 +217,7 @@ static int processTask(HttpRequest *request, NSString* requestType, void *stream
|
|||
}
|
||||
}
|
||||
|
||||
httpAsynConn = [HttpAsynConnection new];
|
||||
HttpAsynConnection *httpAsynConn = [HttpAsynConnection new];
|
||||
httpAsynConn.srcURL = urlstring;
|
||||
httpAsynConn.sslFile = nil;
|
||||
NSString *sslFile = nil;
|
||||
|
@ -256,7 +255,7 @@ static int processTask(HttpRequest *request, NSString* requestType, void *stream
|
|||
NSString *domain = cookie.domain;
|
||||
//BOOL session = cookie.sessionOnly;
|
||||
NSString *path = cookie.path;
|
||||
BOOL secure = cookie.secure;
|
||||
BOOL secure = cookie.isSecure;
|
||||
NSDate *date = cookie.expiresDate;
|
||||
NSString *name = cookie.name;
|
||||
NSString *value = cookie.value;
|
||||
|
@ -356,16 +355,16 @@ static void processResponse(HttpResponse* response, char* errorBuffer)
|
|||
// HttpClient implementation
|
||||
HttpClient* HttpClient::getInstance()
|
||||
{
|
||||
if (s_pHttpClient == nullptr) {
|
||||
s_pHttpClient = new (std::nothrow) HttpClient();
|
||||
if (s_HttpClient == nullptr) {
|
||||
s_HttpClient = new (std::nothrow) HttpClient();
|
||||
}
|
||||
|
||||
return s_pHttpClient;
|
||||
return s_HttpClient;
|
||||
}
|
||||
|
||||
void HttpClient::destroyInstance()
|
||||
{
|
||||
CC_SAFE_DELETE(s_pHttpClient);
|
||||
CC_SAFE_DELETE(s_HttpClient);
|
||||
}
|
||||
|
||||
void HttpClient::enableCookies(const char* cookieFile) {
|
||||
|
@ -403,7 +402,7 @@ HttpClient::~HttpClient()
|
|||
s_SleepCondition.notify_one();
|
||||
}
|
||||
|
||||
s_pHttpClient = nullptr;
|
||||
s_HttpClient = nullptr;
|
||||
|
||||
if(!s_cookieFilename.empty())
|
||||
{
|
||||
|
|
|
@ -104,7 +104,7 @@ int Application::run()
|
|||
director = nullptr;
|
||||
}
|
||||
glview->release();
|
||||
return -1;
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
|
||||
void Application::setAnimationInterval(double interval)
|
||||
|
|
|
@ -595,18 +595,36 @@ void GLProgram::use()
|
|||
GL::useProgram(_program);
|
||||
}
|
||||
|
||||
std::string GLProgram::logForOpenGLObject(GLuint object, GLInfoFunction infoFunc, GLLogFunction logFunc) const
|
||||
static std::string logForOpenGLShader(GLuint shader)
|
||||
{
|
||||
std::string ret;
|
||||
GLint logLength = 0, charsWritten = 0;
|
||||
|
||||
infoFunc(object, GL_INFO_LOG_LENGTH, &logLength);
|
||||
glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &logLength);
|
||||
if (logLength < 1)
|
||||
return "";
|
||||
|
||||
char *logBytes = (char*)malloc(logLength);
|
||||
logFunc(object, logLength, &charsWritten, logBytes);
|
||||
char *logBytes = (char*)malloc(logLength + 1);
|
||||
glGetShaderInfoLog(shader, logLength, &charsWritten, logBytes);
|
||||
logBytes[logLength] = '\0';
|
||||
ret = logBytes;
|
||||
|
||||
free(logBytes);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static std::string logForOpenGLProgram(GLuint program)
|
||||
{
|
||||
std::string ret;
|
||||
GLint logLength = 0, charsWritten = 0;
|
||||
|
||||
glGetProgramiv(program, GL_INFO_LOG_LENGTH, &logLength);
|
||||
if (logLength < 1)
|
||||
return "";
|
||||
|
||||
char *logBytes = (char*)malloc(logLength + 1);
|
||||
glGetProgramInfoLog(program, logLength, &charsWritten, logBytes);
|
||||
logBytes[logLength] = '\0';
|
||||
ret = logBytes;
|
||||
|
||||
free(logBytes);
|
||||
|
@ -615,17 +633,17 @@ std::string GLProgram::logForOpenGLObject(GLuint object, GLInfoFunction infoFunc
|
|||
|
||||
std::string GLProgram::getVertexShaderLog() const
|
||||
{
|
||||
return this->logForOpenGLObject(_vertShader, (GLInfoFunction)&glGetShaderiv, (GLLogFunction)&glGetShaderInfoLog);
|
||||
return cocos2d::logForOpenGLShader(_vertShader);
|
||||
}
|
||||
|
||||
std::string GLProgram::getFragmentShaderLog() const
|
||||
{
|
||||
return this->logForOpenGLObject(_fragShader, (GLInfoFunction)&glGetShaderiv, (GLLogFunction)&glGetShaderInfoLog);
|
||||
return cocos2d::logForOpenGLShader(_fragShader);
|
||||
}
|
||||
|
||||
std::string GLProgram::getProgramLog() const
|
||||
{
|
||||
return this->logForOpenGLObject(_program, (GLInfoFunction)&glGetProgramiv, (GLLogFunction)&glGetProgramInfoLog);
|
||||
return logForOpenGLProgram(_program);
|
||||
}
|
||||
|
||||
// Uniform cache
|
||||
|
|
|
@ -47,10 +47,10 @@ NS_CC_BEGIN
|
|||
|
||||
class GLProgram;
|
||||
class Director;
|
||||
//FIXME: these two typedefs would be deprecated or removed in version 4.0
|
||||
typedef void (*GLInfoFunction)(GLuint program, GLenum pname, GLint* params);
|
||||
typedef void (*GLLogFunction) (GLuint program, GLsizei bufsize, GLsizei* length, GLchar* infolog);
|
||||
|
||||
|
||||
struct VertexAttrib
|
||||
{
|
||||
GLuint index;
|
||||
|
@ -333,8 +333,7 @@ protected:
|
|||
void parseUniforms();
|
||||
|
||||
bool compileShader(GLuint * shader, GLenum type, const GLchar* source);
|
||||
std::string logForOpenGLObject(GLuint object, GLInfoFunction infoFunc, GLLogFunction logFunc) const;
|
||||
|
||||
|
||||
GLuint _program;
|
||||
GLuint _vertShader;
|
||||
GLuint _fragShader;
|
||||
|
|
|
@ -627,7 +627,13 @@ void Downloader::groupBatchDownload(const DownloadUnits &units)
|
|||
FD_ZERO(&fdread);
|
||||
FD_ZERO(&fdwrite);
|
||||
FD_ZERO(&fdexcep);
|
||||
// FIXME: when jenkins migrate to ubuntu, we should remove this hack code
|
||||
#if (CC_TARGET_PLATFORM == CC_PLATFORM_LINUX)
|
||||
curl_multi_fdset(multi_handle, &fdread, &fdwrite, &fdexcep, &maxfd);
|
||||
rc = select(maxfd + 1, &fdread, &fdwrite, &fdexcep, &select_tv);
|
||||
#else
|
||||
rc = curl_multi_wait(multi_handle,nullptr, 0, MAX_WAIT_MSECS, &maxfd);
|
||||
#endif
|
||||
|
||||
switch(rc)
|
||||
{
|
||||
|
|
|
@ -213,6 +213,7 @@ void StartupCall::startup()
|
|||
trackLaunchEvent();
|
||||
}
|
||||
|
||||
//
|
||||
// *NOTE*
|
||||
// track event on windows / mac platform
|
||||
//
|
||||
|
@ -232,7 +233,7 @@ void StartupCall::trackEvent(const char *eventName)
|
|||
"http://www.google-analytics.com/collect",
|
||||
kCCHTTPRequestMethodPOST);
|
||||
request->addPOSTValue("v", "1");
|
||||
request->addPOSTValue("tid", "UA-55061270-1");
|
||||
request->addPOSTValue("tid", "UA-58200293-1");
|
||||
request->addPOSTValue("cid", player::DeviceEx::getInstance()->getUserGUID().c_str());
|
||||
request->addPOSTValue("t", "event");
|
||||
|
||||
|
|
|
@ -347,7 +347,7 @@ std::string AudioEngineTestDemo::title() const
|
|||
bool AudioControlTest::init()
|
||||
{
|
||||
auto ret = AudioEngineTestDemo::init();
|
||||
_audioID = AudioEngine::INVAILD_AUDIO_ID;
|
||||
_audioID = AudioEngine::INVALID_AUDIO_ID;
|
||||
_loopEnabled = false;
|
||||
_volume = 1.0f;
|
||||
_duration = AudioEngine::TIME_UNKNOWN;
|
||||
|
@ -359,13 +359,13 @@ bool AudioControlTest::init()
|
|||
auto& layerSize = this->getContentSize();
|
||||
|
||||
auto playItem = TextButton::create("play", [&](TextButton* button){
|
||||
if (_audioID == AudioEngine::INVAILD_AUDIO_ID) {
|
||||
if (_audioID == AudioEngine::INVALID_AUDIO_ID) {
|
||||
_audioID = AudioEngine::play2d("background.mp3", _loopEnabled, _volume);
|
||||
|
||||
if(_audioID != AudioEngine::INVAILD_AUDIO_ID) {
|
||||
if(_audioID != AudioEngine::INVALID_AUDIO_ID) {
|
||||
button->setEnabled(false);
|
||||
AudioEngine::setFinishCallback(_audioID, [&](int id, const std::string& filePath){
|
||||
_audioID = AudioEngine::INVAILD_AUDIO_ID;
|
||||
_audioID = AudioEngine::INVALID_AUDIO_ID;
|
||||
((TextButton*)_playItem)->setEnabled(true);
|
||||
|
||||
_timeRatio = 0.0f;
|
||||
|
@ -379,10 +379,10 @@ bool AudioControlTest::init()
|
|||
addChild(playItem);
|
||||
|
||||
auto stopItem = TextButton::create("stop", [&](TextButton* button){
|
||||
if (_audioID != AudioEngine::INVAILD_AUDIO_ID ) {
|
||||
if (_audioID != AudioEngine::INVALID_AUDIO_ID ) {
|
||||
AudioEngine::stop(_audioID);
|
||||
|
||||
_audioID = AudioEngine::INVAILD_AUDIO_ID;
|
||||
_audioID = AudioEngine::INVALID_AUDIO_ID;
|
||||
((TextButton*)_playItem)->setEnabled(true);
|
||||
}
|
||||
});
|
||||
|
@ -390,7 +390,7 @@ bool AudioControlTest::init()
|
|||
addChild(stopItem);
|
||||
|
||||
auto pauseItem = TextButton::create("pause", [&](TextButton* button){
|
||||
if (_audioID != AudioEngine::INVAILD_AUDIO_ID ) {
|
||||
if (_audioID != AudioEngine::INVALID_AUDIO_ID ) {
|
||||
AudioEngine::pause(_audioID);
|
||||
}
|
||||
});
|
||||
|
@ -398,7 +398,7 @@ bool AudioControlTest::init()
|
|||
addChild(pauseItem);
|
||||
|
||||
auto resumeItem = TextButton::create("resume", [&](TextButton* button){
|
||||
if (_audioID != AudioEngine::INVAILD_AUDIO_ID ) {
|
||||
if (_audioID != AudioEngine::INVALID_AUDIO_ID ) {
|
||||
AudioEngine::resume(_audioID);
|
||||
}
|
||||
});
|
||||
|
@ -408,7 +408,7 @@ bool AudioControlTest::init()
|
|||
auto loopItem = TextButton::create("enable-loop", [&](TextButton* button){
|
||||
_loopEnabled = !_loopEnabled;
|
||||
|
||||
if (_audioID != AudioEngine::INVAILD_AUDIO_ID ) {
|
||||
if (_audioID != AudioEngine::INVALID_AUDIO_ID ) {
|
||||
AudioEngine::setLoop(_audioID, _loopEnabled);
|
||||
}
|
||||
if(_loopEnabled){
|
||||
|
@ -424,7 +424,7 @@ bool AudioControlTest::init()
|
|||
auto uncacheItem = TextButton::create("uncache", [&](TextButton* button){
|
||||
AudioEngine::uncache("background.mp3");
|
||||
|
||||
_audioID = AudioEngine::INVAILD_AUDIO_ID;
|
||||
_audioID = AudioEngine::INVALID_AUDIO_ID;
|
||||
((TextButton*)_playItem)->setEnabled(true);
|
||||
});
|
||||
uncacheItem->setPosition(layerSize.width * 0.7f,layerSize.height * 0.5f);
|
||||
|
@ -434,7 +434,7 @@ bool AudioControlTest::init()
|
|||
volumeSlider->setPercent(100);
|
||||
volumeSlider->setCallBack([&](SliderEx* sender,float ratio,SliderEx::TouchEvent event){
|
||||
_volume = ratio;
|
||||
if (_audioID != AudioEngine::INVAILD_AUDIO_ID ) {
|
||||
if (_audioID != AudioEngine::INVALID_AUDIO_ID ) {
|
||||
AudioEngine::setVolume(_audioID, _volume);
|
||||
}
|
||||
});
|
||||
|
@ -449,7 +449,7 @@ bool AudioControlTest::init()
|
|||
_updateTimeSlider = false;
|
||||
break;
|
||||
case SliderEx::TouchEvent::UP:
|
||||
if (_audioID != AudioEngine::INVAILD_AUDIO_ID && _duration != AudioEngine::TIME_UNKNOWN) {
|
||||
if (_audioID != AudioEngine::INVALID_AUDIO_ID && _duration != AudioEngine::TIME_UNKNOWN) {
|
||||
AudioEngine::setCurrentTime(_audioID,_duration * ratio);
|
||||
}
|
||||
case SliderEx::TouchEvent::CANCEL:
|
||||
|
@ -481,7 +481,7 @@ bool AudioControlTest::init()
|
|||
|
||||
void AudioControlTest::update(float dt)
|
||||
{
|
||||
if (_audioID != AudioEngine::INVAILD_AUDIO_ID ) {
|
||||
if (_audioID != AudioEngine::INVALID_AUDIO_ID ) {
|
||||
if(_duration == AudioEngine::TIME_UNKNOWN){
|
||||
_duration = AudioEngine::getDuration(_audioID);
|
||||
}
|
||||
|
@ -524,7 +524,7 @@ bool PlaySimultaneouslyTest::init()
|
|||
auto startTime = utils::gettime();
|
||||
for(int index = 0; index < TEST_COUNT; ++index){
|
||||
audioId = AudioEngine::play2d(_files[index]);
|
||||
if(audioId != AudioEngine::INVAILD_AUDIO_ID){
|
||||
if(audioId != AudioEngine::INVALID_AUDIO_ID){
|
||||
_playingcount += 1;
|
||||
|
||||
AudioEngine::setFinishCallback(audioId, [&](int id, const std::string& filePath){
|
||||
|
@ -584,7 +584,7 @@ bool AudioProfileTest::init()
|
|||
auto playItem = TextButton::create(text, [&](TextButton* button){
|
||||
int index = button->getTag();
|
||||
auto id = AudioEngine::play2d(_files[index], false, 1.0f, &_audioProfile);
|
||||
if(id != AudioEngine::INVAILD_AUDIO_ID){
|
||||
if(id != AudioEngine::INVALID_AUDIO_ID){
|
||||
_time = _minDelay;
|
||||
_audioCount += 1;
|
||||
char show[30];
|
||||
|
|
Loading…
Reference in New Issue