Merge branch 'v3' of github.com:cocos2d/cocos2d-x into v3_origin

This commit is contained in:
htl 2015-01-05 14:07:37 +08:00
commit d754900b28
13 changed files with 75 additions and 50 deletions

View File

@ -1,4 +1,6 @@
cocos2d-x-3.4rc0 Jan.9 2015 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 [FIX] WP8: compiling error on ARM architecture
cocos2d-x-3.4beta0 Dec.31 2014 cocos2d-x-3.4beta0 Dec.31 2014

View File

@ -47,7 +47,7 @@
using namespace cocos2d; using namespace cocos2d;
using namespace cocos2d::experimental; 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; const float AudioEngine::TIME_UNKNOWN = -1.0f;
//audio file path,audio IDs //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 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 { do {
if ( !lazyInit() ){ if ( !lazyInit() ){
@ -130,7 +130,7 @@ int AudioEngine::play2d(const std::string& filePath, bool loop, float volume, co
} }
ret = _audioEngineImpl->play2d(filePath, loop, volume); ret = _audioEngineImpl->play2d(filePath, loop, volume);
if (ret != INVAILD_AUDIO_ID) if (ret != INVALID_AUDIO_ID)
{ {
_audioPathIDMap[filePath].push_back(ret); _audioPathIDMap[filePath].push_back(ret);
auto it = _audioPathIDMap.find(filePath); auto it = _audioPathIDMap.find(filePath);

View File

@ -229,7 +229,7 @@ bool AudioEngineImpl::init()
int AudioEngineImpl::play2d(const std::string &filePath ,bool loop ,float volume) int AudioEngineImpl::play2d(const std::string &filePath ,bool loop ,float volume)
{ {
auto audioId = AudioEngine::INVAILD_AUDIO_ID; auto audioId = AudioEngine::INVALID_AUDIO_ID;
do do
{ {

View File

@ -187,7 +187,7 @@ bool AudioEngineImpl::init()
int AudioEngineImpl::play2d(const std::string &filePath ,bool loop ,float volume) int AudioEngineImpl::play2d(const std::string &filePath ,bool loop ,float volume)
{ {
if (s_ALDevice == nullptr) { if (s_ALDevice == nullptr) {
return AudioEngine::INVAILD_AUDIO_ID; return AudioEngine::INVALID_AUDIO_ID;
} }
bool sourceFlag = false; bool sourceFlag = false;
@ -201,7 +201,7 @@ int AudioEngineImpl::play2d(const std::string &filePath ,bool loop ,float volume
} }
} }
if(!sourceFlag){ if(!sourceFlag){
return AudioEngine::INVAILD_AUDIO_ID; return AudioEngine::INVALID_AUDIO_ID;
} }
AudioCache* audioCache = nullptr; AudioCache* audioCache = nullptr;

View File

@ -81,7 +81,7 @@ public:
PAUSED PAUSED
}; };
static const int INVAILD_AUDIO_ID; static const int INVALID_AUDIO_ID;
static const float TIME_UNKNOWN; static const float TIME_UNKNOWN;

View File

@ -205,7 +205,7 @@ int AudioEngineImpl::play2d(const std::string &filePath ,bool loop ,float volume
} }
} }
if(!availableSourceExist){ if(!availableSourceExist){
return AudioEngine::INVAILD_AUDIO_ID; return AudioEngine::INVALID_AUDIO_ID;
} }
AudioCache* audioCache = nullptr; AudioCache* audioCache = nullptr;
@ -244,7 +244,7 @@ int AudioEngineImpl::play2d(const std::string &filePath ,bool loop ,float volume
if (eraseCache){ if (eraseCache){
_audioCaches.erase(filePath); _audioCaches.erase(filePath);
return AudioEngine::INVAILD_AUDIO_ID; return AudioEngine::INVALID_AUDIO_ID;
} }
audioCache->_fileFullPath = FileUtils::getInstance()->fullPathForFilename(filePath); audioCache->_fileFullPath = FileUtils::getInstance()->fullPathForFilename(filePath);

View File

@ -43,8 +43,6 @@
NS_CC_BEGIN NS_CC_BEGIN
#define ERROR_SIZE 256
namespace network { namespace network {
static std::mutex s_requestQueueMutex; static std::mutex s_requestQueueMutex;
@ -55,11 +53,12 @@ static std::condition_variable_any s_SleepCondition;
static Vector<HttpRequest*>* s_requestQueue = nullptr; static Vector<HttpRequest*>* s_requestQueue = nullptr;
static Vector<HttpResponse*>* s_responseQueue = 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 HttpCookie *s_cookie = nullptr;
static const int ERROR_SIZE = 256;
static char s_errorBuffer[ERROR_SIZE] = {0}; static char s_errorBuffer[ERROR_SIZE] = {0};
static std::string s_cookieFilename = ""; static std::string s_cookieFilename = "";
@ -106,7 +105,7 @@ void HttpClient::networkThread()
s_responseQueue->pushBack(response); s_responseQueue->pushBack(response);
s_responseQueueMutex.unlock(); s_responseQueueMutex.unlock();
if (nullptr != s_pHttpClient) { if (nullptr != s_HttpClient) {
scheduler->performFunctionInCocosThread(CC_CALLBACK_0(HttpClient::dispatchResponseCallbacks, this)); scheduler->performFunctionInCocosThread(CC_CALLBACK_0(HttpClient::dispatchResponseCallbacks, this));
} }
} }
@ -142,11 +141,11 @@ void HttpClient::networkThreadAlone(HttpRequest* request)
if (callback != nullptr) if (callback != nullptr)
{ {
callback(s_pHttpClient, response); callback(s_HttpClient, response);
} }
else if (pTarget && pSelector) else if (pTarget && pSelector)
{ {
(pTarget->*pSelector)(s_pHttpClient, response); (pTarget->*pSelector)(s_HttpClient, response);
} }
response->release(); response->release();
// do not release in other thread // 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.srcURL = urlstring;
httpAsynConn.sslFile = nil; httpAsynConn.sslFile = nil;
NSString *sslFile = nil; NSString *sslFile = nil;
@ -256,7 +255,7 @@ static int processTask(HttpRequest *request, NSString* requestType, void *stream
NSString *domain = cookie.domain; NSString *domain = cookie.domain;
//BOOL session = cookie.sessionOnly; //BOOL session = cookie.sessionOnly;
NSString *path = cookie.path; NSString *path = cookie.path;
BOOL secure = cookie.secure; BOOL secure = cookie.isSecure;
NSDate *date = cookie.expiresDate; NSDate *date = cookie.expiresDate;
NSString *name = cookie.name; NSString *name = cookie.name;
NSString *value = cookie.value; NSString *value = cookie.value;
@ -356,16 +355,16 @@ static void processResponse(HttpResponse* response, char* errorBuffer)
// HttpClient implementation // HttpClient implementation
HttpClient* HttpClient::getInstance() HttpClient* HttpClient::getInstance()
{ {
if (s_pHttpClient == nullptr) { if (s_HttpClient == nullptr) {
s_pHttpClient = new (std::nothrow) HttpClient(); s_HttpClient = new (std::nothrow) HttpClient();
} }
return s_pHttpClient; return s_HttpClient;
} }
void HttpClient::destroyInstance() void HttpClient::destroyInstance()
{ {
CC_SAFE_DELETE(s_pHttpClient); CC_SAFE_DELETE(s_HttpClient);
} }
void HttpClient::enableCookies(const char* cookieFile) { void HttpClient::enableCookies(const char* cookieFile) {
@ -403,7 +402,7 @@ HttpClient::~HttpClient()
s_SleepCondition.notify_one(); s_SleepCondition.notify_one();
} }
s_pHttpClient = nullptr; s_HttpClient = nullptr;
if(!s_cookieFilename.empty()) if(!s_cookieFilename.empty())
{ {

View File

@ -104,7 +104,7 @@ int Application::run()
director = nullptr; director = nullptr;
} }
glview->release(); glview->release();
return -1; return EXIT_SUCCESS;
} }
void Application::setAnimationInterval(double interval) void Application::setAnimationInterval(double interval)

View File

@ -595,18 +595,36 @@ void GLProgram::use()
GL::useProgram(_program); GL::useProgram(_program);
} }
std::string GLProgram::logForOpenGLObject(GLuint object, GLInfoFunction infoFunc, GLLogFunction logFunc) const static std::string logForOpenGLShader(GLuint shader)
{ {
std::string ret; std::string ret;
GLint logLength = 0, charsWritten = 0; GLint logLength = 0, charsWritten = 0;
infoFunc(object, GL_INFO_LOG_LENGTH, &logLength); glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &logLength);
if (logLength < 1) if (logLength < 1)
return ""; return "";
char *logBytes = (char*)malloc(logLength); char *logBytes = (char*)malloc(logLength + 1);
logFunc(object, logLength, &charsWritten, logBytes); 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; ret = logBytes;
free(logBytes); free(logBytes);
@ -615,17 +633,17 @@ std::string GLProgram::logForOpenGLObject(GLuint object, GLInfoFunction infoFunc
std::string GLProgram::getVertexShaderLog() const std::string GLProgram::getVertexShaderLog() const
{ {
return this->logForOpenGLObject(_vertShader, (GLInfoFunction)&glGetShaderiv, (GLLogFunction)&glGetShaderInfoLog); return cocos2d::logForOpenGLShader(_vertShader);
} }
std::string GLProgram::getFragmentShaderLog() const std::string GLProgram::getFragmentShaderLog() const
{ {
return this->logForOpenGLObject(_fragShader, (GLInfoFunction)&glGetShaderiv, (GLLogFunction)&glGetShaderInfoLog); return cocos2d::logForOpenGLShader(_fragShader);
} }
std::string GLProgram::getProgramLog() const std::string GLProgram::getProgramLog() const
{ {
return this->logForOpenGLObject(_program, (GLInfoFunction)&glGetProgramiv, (GLLogFunction)&glGetProgramInfoLog); return logForOpenGLProgram(_program);
} }
// Uniform cache // Uniform cache

View File

@ -47,10 +47,10 @@ NS_CC_BEGIN
class GLProgram; class GLProgram;
class Director; 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 (*GLInfoFunction)(GLuint program, GLenum pname, GLint* params);
typedef void (*GLLogFunction) (GLuint program, GLsizei bufsize, GLsizei* length, GLchar* infolog); typedef void (*GLLogFunction) (GLuint program, GLsizei bufsize, GLsizei* length, GLchar* infolog);
struct VertexAttrib struct VertexAttrib
{ {
GLuint index; GLuint index;
@ -333,7 +333,6 @@ protected:
void parseUniforms(); void parseUniforms();
bool compileShader(GLuint * shader, GLenum type, const GLchar* source); bool compileShader(GLuint * shader, GLenum type, const GLchar* source);
std::string logForOpenGLObject(GLuint object, GLInfoFunction infoFunc, GLLogFunction logFunc) const;
GLuint _program; GLuint _program;
GLuint _vertShader; GLuint _vertShader;

View File

@ -627,7 +627,13 @@ void Downloader::groupBatchDownload(const DownloadUnits &units)
FD_ZERO(&fdread); FD_ZERO(&fdread);
FD_ZERO(&fdwrite); FD_ZERO(&fdwrite);
FD_ZERO(&fdexcep); 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); rc = curl_multi_wait(multi_handle,nullptr, 0, MAX_WAIT_MSECS, &maxfd);
#endif
switch(rc) switch(rc)
{ {

View File

@ -213,6 +213,7 @@ void StartupCall::startup()
trackLaunchEvent(); trackLaunchEvent();
} }
//
// *NOTE* // *NOTE*
// track event on windows / mac platform // track event on windows / mac platform
// //
@ -232,7 +233,7 @@ void StartupCall::trackEvent(const char *eventName)
"http://www.google-analytics.com/collect", "http://www.google-analytics.com/collect",
kCCHTTPRequestMethodPOST); kCCHTTPRequestMethodPOST);
request->addPOSTValue("v", "1"); 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("cid", player::DeviceEx::getInstance()->getUserGUID().c_str());
request->addPOSTValue("t", "event"); request->addPOSTValue("t", "event");

View File

@ -347,7 +347,7 @@ std::string AudioEngineTestDemo::title() const
bool AudioControlTest::init() bool AudioControlTest::init()
{ {
auto ret = AudioEngineTestDemo::init(); auto ret = AudioEngineTestDemo::init();
_audioID = AudioEngine::INVAILD_AUDIO_ID; _audioID = AudioEngine::INVALID_AUDIO_ID;
_loopEnabled = false; _loopEnabled = false;
_volume = 1.0f; _volume = 1.0f;
_duration = AudioEngine::TIME_UNKNOWN; _duration = AudioEngine::TIME_UNKNOWN;
@ -359,13 +359,13 @@ bool AudioControlTest::init()
auto& layerSize = this->getContentSize(); auto& layerSize = this->getContentSize();
auto playItem = TextButton::create("play", [&](TextButton* button){ 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); _audioID = AudioEngine::play2d("background.mp3", _loopEnabled, _volume);
if(_audioID != AudioEngine::INVAILD_AUDIO_ID) { if(_audioID != AudioEngine::INVALID_AUDIO_ID) {
button->setEnabled(false); button->setEnabled(false);
AudioEngine::setFinishCallback(_audioID, [&](int id, const std::string& filePath){ AudioEngine::setFinishCallback(_audioID, [&](int id, const std::string& filePath){
_audioID = AudioEngine::INVAILD_AUDIO_ID; _audioID = AudioEngine::INVALID_AUDIO_ID;
((TextButton*)_playItem)->setEnabled(true); ((TextButton*)_playItem)->setEnabled(true);
_timeRatio = 0.0f; _timeRatio = 0.0f;
@ -379,10 +379,10 @@ bool AudioControlTest::init()
addChild(playItem); addChild(playItem);
auto stopItem = TextButton::create("stop", [&](TextButton* button){ auto stopItem = TextButton::create("stop", [&](TextButton* button){
if (_audioID != AudioEngine::INVAILD_AUDIO_ID ) { if (_audioID != AudioEngine::INVALID_AUDIO_ID ) {
AudioEngine::stop(_audioID); AudioEngine::stop(_audioID);
_audioID = AudioEngine::INVAILD_AUDIO_ID; _audioID = AudioEngine::INVALID_AUDIO_ID;
((TextButton*)_playItem)->setEnabled(true); ((TextButton*)_playItem)->setEnabled(true);
} }
}); });
@ -390,7 +390,7 @@ bool AudioControlTest::init()
addChild(stopItem); addChild(stopItem);
auto pauseItem = TextButton::create("pause", [&](TextButton* button){ auto pauseItem = TextButton::create("pause", [&](TextButton* button){
if (_audioID != AudioEngine::INVAILD_AUDIO_ID ) { if (_audioID != AudioEngine::INVALID_AUDIO_ID ) {
AudioEngine::pause(_audioID); AudioEngine::pause(_audioID);
} }
}); });
@ -398,7 +398,7 @@ bool AudioControlTest::init()
addChild(pauseItem); addChild(pauseItem);
auto resumeItem = TextButton::create("resume", [&](TextButton* button){ auto resumeItem = TextButton::create("resume", [&](TextButton* button){
if (_audioID != AudioEngine::INVAILD_AUDIO_ID ) { if (_audioID != AudioEngine::INVALID_AUDIO_ID ) {
AudioEngine::resume(_audioID); AudioEngine::resume(_audioID);
} }
}); });
@ -408,7 +408,7 @@ bool AudioControlTest::init()
auto loopItem = TextButton::create("enable-loop", [&](TextButton* button){ auto loopItem = TextButton::create("enable-loop", [&](TextButton* button){
_loopEnabled = !_loopEnabled; _loopEnabled = !_loopEnabled;
if (_audioID != AudioEngine::INVAILD_AUDIO_ID ) { if (_audioID != AudioEngine::INVALID_AUDIO_ID ) {
AudioEngine::setLoop(_audioID, _loopEnabled); AudioEngine::setLoop(_audioID, _loopEnabled);
} }
if(_loopEnabled){ if(_loopEnabled){
@ -424,7 +424,7 @@ bool AudioControlTest::init()
auto uncacheItem = TextButton::create("uncache", [&](TextButton* button){ auto uncacheItem = TextButton::create("uncache", [&](TextButton* button){
AudioEngine::uncache("background.mp3"); AudioEngine::uncache("background.mp3");
_audioID = AudioEngine::INVAILD_AUDIO_ID; _audioID = AudioEngine::INVALID_AUDIO_ID;
((TextButton*)_playItem)->setEnabled(true); ((TextButton*)_playItem)->setEnabled(true);
}); });
uncacheItem->setPosition(layerSize.width * 0.7f,layerSize.height * 0.5f); uncacheItem->setPosition(layerSize.width * 0.7f,layerSize.height * 0.5f);
@ -434,7 +434,7 @@ bool AudioControlTest::init()
volumeSlider->setPercent(100); volumeSlider->setPercent(100);
volumeSlider->setCallBack([&](SliderEx* sender,float ratio,SliderEx::TouchEvent event){ volumeSlider->setCallBack([&](SliderEx* sender,float ratio,SliderEx::TouchEvent event){
_volume = ratio; _volume = ratio;
if (_audioID != AudioEngine::INVAILD_AUDIO_ID ) { if (_audioID != AudioEngine::INVALID_AUDIO_ID ) {
AudioEngine::setVolume(_audioID, _volume); AudioEngine::setVolume(_audioID, _volume);
} }
}); });
@ -449,7 +449,7 @@ bool AudioControlTest::init()
_updateTimeSlider = false; _updateTimeSlider = false;
break; break;
case SliderEx::TouchEvent::UP: 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); AudioEngine::setCurrentTime(_audioID,_duration * ratio);
} }
case SliderEx::TouchEvent::CANCEL: case SliderEx::TouchEvent::CANCEL:
@ -481,7 +481,7 @@ bool AudioControlTest::init()
void AudioControlTest::update(float dt) void AudioControlTest::update(float dt)
{ {
if (_audioID != AudioEngine::INVAILD_AUDIO_ID ) { if (_audioID != AudioEngine::INVALID_AUDIO_ID ) {
if(_duration == AudioEngine::TIME_UNKNOWN){ if(_duration == AudioEngine::TIME_UNKNOWN){
_duration = AudioEngine::getDuration(_audioID); _duration = AudioEngine::getDuration(_audioID);
} }
@ -524,7 +524,7 @@ bool PlaySimultaneouslyTest::init()
auto startTime = utils::gettime(); auto startTime = utils::gettime();
for(int index = 0; index < TEST_COUNT; ++index){ for(int index = 0; index < TEST_COUNT; ++index){
audioId = AudioEngine::play2d(_files[index]); audioId = AudioEngine::play2d(_files[index]);
if(audioId != AudioEngine::INVAILD_AUDIO_ID){ if(audioId != AudioEngine::INVALID_AUDIO_ID){
_playingcount += 1; _playingcount += 1;
AudioEngine::setFinishCallback(audioId, [&](int id, const std::string& filePath){ AudioEngine::setFinishCallback(audioId, [&](int id, const std::string& filePath){
@ -584,7 +584,7 @@ bool AudioProfileTest::init()
auto playItem = TextButton::create(text, [&](TextButton* button){ auto playItem = TextButton::create(text, [&](TextButton* button){
int index = button->getTag(); int index = button->getTag();
auto id = AudioEngine::play2d(_files[index], false, 1.0f, &_audioProfile); auto id = AudioEngine::play2d(_files[index], false, 1.0f, &_audioProfile);
if(id != AudioEngine::INVAILD_AUDIO_ID){ if(id != AudioEngine::INVALID_AUDIO_ID){
_time = _minDelay; _time = _minDelay;
_audioCount += 1; _audioCount += 1;
char show[30]; char show[30];