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
[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

View File

@ -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);

View File

@ -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
{

View File

@ -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;

View File

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

View File

@ -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);

View File

@ -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())
{

View File

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

View File

@ -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

View File

@ -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;

View File

@ -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)
{

View File

@ -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");

View File

@ -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];