void CKLBOGLWrapper::releaseShader(CShader* pShader) {
    CShader* p = this->shaderList;
    CShader* prev = null;
    while (p != pShader) {
        prev = p;
        p = p->pNext;
    }

    //
    // Remove from link list.
    //
    if (prev == null) {
        this->shaderList = pShader->pNext;
    } else {
        prev->pNext = pShader->pNext;
    }

    //
    // Delete shader from GL
    //
    dglDeleteShader(pShader->shaderObj);

    // Free param
    if (pShader->arrayParam) {
        KLBDELETE(pShader->arrayParam);
    }

    // Delete object
    KLBDELETE(pShader);
}
Пример #2
0
void JSonDB::clean() {
	RecordListHeader* pRecord = m_startRecord;
	while (pRecord) {
		RecordListHeader* pNextRecord = pRecord->pNextRecord;
		KLBDELETE(pRecord->fields);
		KLBDELETE(pRecord);
		pRecord = pNextRecord;
	}
	m_startRecord = NULL;

	KLBDELETEA(mStringRecordBuffer);
	mStringRecordBuffer = NULL;
}
Пример #3
0
void
CKLBUpdate::exec_unzip(u32 /*deltaT*/)
{
	bool bResult = true;
	if(m_extracting) {
		if(m_unzip->isFinishExtract()) {
			// 戻り値が true であれば読み込みが終わっている
			m_extracting = false;
			bResult = m_unzip->gotoNextFile();	// 次のファイルへ

			// 現在展開済みのファイル数を得る
			int finished = m_unzip->getFinishedEntry();
			CKLBScriptEnv::getInstance().call_eventUpdateZIP(m_callbackZIP, this, finished, m_zipEntry);

			if(!bResult) {
				// 展開終了
				KLBDELETE(m_unzip);
				m_unzip = NULL;
				// テンポラリzip削除
				CPFInterface::getInstance().platform().removeTmpFile(m_tmpPath);
				m_eStep = S_COMPLETE;
			}
		}
	}
	// 次のファイルがあり、なおかつ展開処理が終了していれば次のファイルの読み込みを開始する
	if(bResult && !m_extracting) {
		if(m_unzip->readCurrentFileInfo()) {
			m_unzip->extractCurrentFile("file://external/");
			m_extracting = true;
		}
	}
}
Пример #4
0
/*static*/
IDataSource* JSonDB::openDB(const u8* source, u32 sourceLength) {
	JSonDB* newDB = KLBNEW(JSonDB);
	if (!newDB->readDBInternal(source, sourceLength)) {
		KLBDELETE(newDB);
		newDB = NULL;
	}
	return newDB;
}
Пример #5
0
CKLBUIButton* CKLBUIButton::create(CKLBTask* pParentTask, const char * funcName) {
	CKLBUIButton* pTask = KLBNEW(CKLBUIButton);
	if(!pTask) return 0;

	if(!pTask->init(pParentTask, funcName)) {
		KLBDELETE(pTask);
		return 0;
	}
	return pTask;
}
Пример #6
0
/*virtual*/
CKLBAbstractAsset*	KLBAudioAssetPlugin::loadByFileName(const char* url) {
	CKLBAudioAsset* pAudioAsset = KLBNEW(CKLBAudioAsset);
	if (pAudioAsset) {
		if (pAudioAsset->init(url)) {
			return pAudioAsset;
		}
		KLBDELETE(pAudioAsset);
	}
	return NULL;
}
Пример #7
0
CKLBPauseCtrl* 
CKLBPauseCtrl::create(CKLBTask* pParentTask, const char* pause, const char* resume) {
	CKLBPauseCtrl* pTask = KLBNEW(CKLBPauseCtrl);
    if(!pTask) { return NULL; }

	if(!pTask->init(pParentTask, pause,resume)) {
		KLBDELETE(pTask);
		return NULL;
	}
	return pTask;
}
Пример #8
0
CKLBLifeCtrlTask* 
CKLBLifeCtrlTask::create(CKLBTask* pParentTask, u32 mode, u32 limit) {
	CKLBLifeCtrlTask* pTask = KLBNEW(CKLBLifeCtrlTask);
    if(!pTask) { return NULL; }

	if(!pTask->init(pParentTask, mode, limit)) {
		KLBDELETE(pTask);
		return NULL;
	}
	return pTask;
}
Пример #9
0
CKLBUISimpleItem* 
CKLBUISimpleItem::create(CKLBUITask* pParent, CKLBNode* pNode, u32 order, float x, float y, const char* asset) 
{
	CKLBUISimpleItem* pTask = KLBNEW(CKLBUISimpleItem);
    if(!pTask) { return NULL; }
	if(!pTask->init(pParent, pNode, order,x,y,asset)) {
		KLBDELETE(pTask);
		return NULL;
	}
	return pTask;
}
Пример #10
0
CKLBUIControl* 
CKLBUIControl::create(CKLBTask* pParentTask, const char* onClick, const char* onDrag) {
	CKLBUIControl* pTask = KLBNEW(CKLBUIControl);
    if(!pTask) { return NULL; }

	if(!pTask->init(pParentTask, onClick, onDrag)) {
		KLBDELETE(pTask);
		return NULL;
	}
	return pTask;
}
Пример #11
0
CKLBUIMultiImgItem* 
CKLBUIMultiImgItem::create(CKLBUITask* pParent, CKLBNode* pNode, u32 order, float x, float y, u32 idx, const char** pArrayAsset, u32* pArrayIndexes, u32 assetCount) 
{
	CKLBUIMultiImgItem* pTask = KLBNEW(CKLBUIMultiImgItem);
    if(!pTask) { return NULL; }

	if(!pTask->init(pParent, pNode, order, x,y,idx,pArrayAsset, pArrayIndexes, assetCount)) {
		KLBDELETE(pTask);
		return NULL;
	}
	return pTask;
}
Пример #12
0
CKLBUITouchPad* 
CKLBUITouchPad::create(CKLBTask* pParentTask, const char * funcName, bool modal) 
{
	CKLBUITouchPad* pTask = KLBNEW(CKLBUITouchPad);
    if(!pTask) { return NULL; }

	if(!pTask->init(pParentTask, funcName, modal)) {
		KLBDELETE(pTask);
		return NULL;
	}
	return pTask;
}
void CKLBOGLWrapper::releaseShaderSet(CShaderSet* pFullShader) {
    klb_assertc(pFullShader,						"null shader set");

    CShaderSet* p		= this->shaderSetList;
    CShaderSet* pPrev	= null;

    while (p != pFullShader) {
        pPrev = p;
        p = p->pNext;
    }

    if (pPrev == null) {
        this->shaderSetList = p->pNext;
    } else {
        pPrev->pNext = p->pNext;
    }

    // Release all instances.
    pFullShader->releaseAllInstances();
    // Release open GL associated program.

    dglDeleteProgram(pFullShader->programObj);

    if (pFullShader->locationArray) {
        KLBDELETE(pFullShader->locationArray);
    }

    pFullShader->vertexShader->refCount--;
    pFullShader->pixelShader->refCount--;

    if (pFullShader->vertexShader->refCount == 0) {
        this->releaseShader(pFullShader->vertexShader);
    }

    if (pFullShader->pixelShader->refCount == 0) {
        this->releaseShader(pFullShader->pixelShader);
    }

    KLBDELETE(pFullShader);
}
Пример #14
0
CKLBGenericTask*
CKLBGenericTask::create(CKLBTask* pParentTask, CKLBTask::TASK_PHASE phase, const char * name_exec, const char * name_die, const char * arr_index)
{
    CKLBGenericTask* pTask = KLBNEW(CKLBGenericTask);
    if(!pTask) {
        return NULL;
    }

    if(!pTask->init(pParentTask, phase, name_exec, name_die, arr_index)) {
        KLBDELETE(pTask);
        return NULL;
    }
    return pTask;
}
Пример #15
0
CKLBUIScore *
CKLBUIScore::create(CKLBUITask * pParent, CKLBNode * pNode,
					u32 order, s32 order_offset, float x, float y, 
					const char ** tex_table, float stepX, float stepY, int column, 
					bool fillzero, bool anim_flags, u32 align, bool countclip)
{
	CKLBUIScore * pTask = KLBNEW(CKLBUIScore);
    if(!pTask) { return NULL; }

	if(!pTask->init(pParent, pNode, order, order_offset, x, y, tex_table, stepX, stepY, column, fillzero, anim_flags, align, countclip)) {
		KLBDELETE(pTask);
		return NULL;
	}
	return pTask;
}
Пример #16
0
void
CKLBLuaLibFONT::remove_font(FONTOBJ * fontobj)
{
	IPlatformRequest& pForm = CPFInterface::getInstance().platform();
	pForm.deleteFont(fontobj->font);
	if(fontobj->prev) {
		fontobj->prev->next = fontobj->next;
	} else {
		ms_begin = fontobj->next;
	}
	if(fontobj->next) {
		fontobj->next->prev = fontobj->prev;
	} else {
		ms_end = fontobj->prev;
	}
	KLBDELETE(fontobj);
}
Пример #17
0
void
CKLBUpdate::die()
{
	if (m_thread) {
		CPFInterface::getInstance().platform().deleteThread(m_thread);
		m_thread = NULL;
	}

	KLBDELETEA(m_zipURL);
	KLBDELETEA(m_tmpPath);
	KLBDELETEA(m_callbackZIP);
	KLBDELETEA(m_callbackDL);
	KLBDELETEA(m_callbackFinish);
	KLBDELETEA(m_callbackError);

	KLBDELETE(m_unzip);
}
Пример #18
0
void
CKLBLuaLibMatrix::delMatrix(MATRIX * pMat)
{
	if(!pMat) return;

	if(pMat->prev) {
		pMat->prev->next = pMat->next;
	} else {
		m_pBegin = pMat->next;
	}
	if(pMat->next) {
		pMat->next->prev = pMat->prev;
	} else {
		m_pEnd = pMat->prev;
	}
	KLBDELETEA(pMat->name);
	KLBDELETE(pMat);
}
// Shaders.
CShader*	CKLBOGLWrapper::createShader		(const char* source, SHADER_TYPE type, const SParam* listParam) {
    CShader* pNewShader = KLBNEW(CShader);
    if (pNewShader) {
        GLuint shaderID = dglCreateShader(type == VERTEX_SHADER ? GL_VERTEX_SHADER : GL_FRAGMENT_SHADER);
        if (shaderID != 0) {
            GLint compiled;

            dglShaderSource(shaderID, 1, &source, null);
            // Compile the shader
            dglCompileShader(shaderID);
            // Check the compile status
            dglGetShaderiv(shaderID, GL_COMPILE_STATUS, &compiled);

            if (compiled) {
                //
                // Parse the list of parameters
                //
                const SParam* parser = listParam;

                bool type;

                if (parser) {
                    s32 uniCount = 0;
                    s32 verCount = 0;
                    while (parser->dType != END_LIST) {
                        if (parser->isUniform) {
                            uniCount++;
                        } else {
                            verCount++;
                        }
                        if (parser->dType & TEXTURE) {
                            pNewShader->enableTexture = true;
                        }
                        if (parser->dType & COLOR) {
                            pNewShader->enableColor = true;
                        }
                        parser++;
                    }

                    pNewShader->countUniform		= uniCount;
                    pNewShader->countStreamInfo		= verCount;

                    pNewShader->arrayParam			= KLBNEWA(CShader::SInternalParam,uniCount + verCount);

                    if (pNewShader->arrayParam) {
                        CShader::SInternalParam* pUniParam = pNewShader->arrayParam;
                        CShader::SInternalParam* pVerParam = &pNewShader->arrayParam[uniCount];
                        parser = listParam;

                        while (parser->dType != END_LIST) {
                            if (parser->isUniform) {
                                pUniParam->param = *parser++;
                                pUniParam++;
                            } else {
                                pVerParam->param = *parser++;
                                pVerParam++;
                            }
                        }

                    }

                    type							= true;
                } else {
                    pNewShader->countUniform		= 0;
                    pNewShader->countStreamInfo		= 0;
                    pNewShader->arrayParam			= null;
                    type							= false;
                }


                if ((pNewShader->arrayParam && type) || (!type)) {
                    pNewShader->refCount	= 0;
                    pNewShader->shaderObj	= shaderID;
                    pNewShader->pNext		= this->shaderList;
                    this->shaderList		= pNewShader;

                    return pNewShader;
                }
            }
            dglDeleteShader(shaderID);
        }

        KLBDELETE(pNewShader);
        pNewShader = null;
    }
    return pNewShader;
}
// Rendering Shader.
CShaderSet*	CKLBOGLWrapper::createShaderSet	(CShader* pVertexShader, CShader* pPixelShader) {
    CShaderSet* pNewShaderSet = KLBNEW(CShaderSet);
    if (pNewShaderSet) {
        s32 size = pVertexShader->countUniform + pPixelShader->countUniform;
        if (size) {
            pNewShaderSet->locationArray = KLBNEWA(s32,size);
        } else {
            pNewShaderSet->locationArray = null;
        }

        if ((pNewShaderSet->locationArray) || (size == 0)) {
            GLuint progID = dglCreateProgram();
            if (progID) {
                // Attach
                dglAttachShader(progID, pVertexShader->shaderObj);
                dglAttachShader(progID, pPixelShader->shaderObj);

                pNewShaderSet->pInstances	= null;
                pNewShaderSet->pMgr			= this;

                //
                // Iterate through vertex shader attribute
                //
                s32 iterator = 0;
                CShader::SInternalParam* pParam = &pVertexShader->arrayParam[pVertexShader->countUniform];
                while (iterator < pVertexShader->countStreamInfo) {
                    dglBindAttribLocation(progID, iterator, pParam->param.name);	// Actually only associated with vertex.
                    iterator++;
                    pParam++;
                }

                dglLinkProgram(progID);

                GLint success = 0;
                dglGetProgramiv(progID, GL_LINK_STATUS, &success);
                if (success)
                {
                    s32 uniformIndex = 0;
                    for (s32 n=0; n < 2; n++) {
                        CShader* pShader;
                        if (n==0) {
                            pShader = pVertexShader;
                        }
                        else {
                            pShader = pPixelShader;
                        }

                        CShader::SInternalParam* pParam = pShader->arrayParam;
                        iterator = 0;
                        while (iterator < pShader->countUniform) {
                            // Becomes UniformID
                            pNewShaderSet->locationArray[uniformIndex++] = dglGetUniformLocation(progID, pParam->param.name);
                            iterator++;
                            pParam++;
                        }
                    }

                    pNewShaderSet->programObj	= progID;
                    pNewShaderSet->pNext		= this->shaderSetList;
                    this->shaderSetList			= pNewShaderSet;

                    pVertexShader->refCount++;
                    pPixelShader->refCount++;

                    pNewShaderSet->pixelShader	= pPixelShader;
                    pNewShaderSet->vertexShader	= pVertexShader;

                    pNewShaderSet->enableTexture	= pPixelShader->enableTexture | pVertexShader->enableTexture;
                    pNewShaderSet->enableColor		= pPixelShader->enableColor   | pVertexShader->enableColor;

                    return pNewShaderSet;
                }
                dglDeleteProgram(progID);
            }

            if (pNewShaderSet->locationArray) {
                KLBDELETE(pNewShaderSet->locationArray);
            }
        }
        KLBDELETE(pNewShaderSet);
    }
    return null;
}