mirror of
https://github.com/isledecomp/isle-portable.git
synced 2026-01-11 18:41:14 +00:00
Merge remote-tracking branch 'isle/master'
This commit is contained in:
commit
69b5f17599
@ -230,14 +230,8 @@ class LegoGameState {
|
|||||||
Act GetCurrentAct() { return m_currentAct; }
|
Act GetCurrentAct() { return m_currentAct; }
|
||||||
|
|
||||||
Act GetLoadedAct() { return m_loadedAct; }
|
Act GetLoadedAct() { return m_loadedAct; }
|
||||||
Area GetPreviousArea() { return m_previousArea; }
|
|
||||||
Area GetUnknown0x42c() { return m_unk0x42c; }
|
|
||||||
|
|
||||||
void SetDirty(MxBool p_isDirty) { m_isDirty = p_isDirty; }
|
|
||||||
void SetPreviousArea(Area p_previousArea) { m_previousArea = p_previousArea; }
|
|
||||||
void SetActorId(MxU8 p_actorId) { m_actorId = p_actorId; }
|
void SetActorId(MxU8 p_actorId) { m_actorId = p_actorId; }
|
||||||
Username* GetPlayersIndex(MxS32 p_index) { return &m_players[p_index]; }
|
|
||||||
MxS16 GetPlayerCount() { return m_playerCount; }
|
|
||||||
LegoBackgroundColor* GetBackgroundColor() { return m_backgroundColor; }
|
LegoBackgroundColor* GetBackgroundColor() { return m_backgroundColor; }
|
||||||
|
|
||||||
void SetCurrentAct(Act p_currentAct);
|
void SetCurrentAct(Act p_currentAct);
|
||||||
@ -263,14 +257,11 @@ class LegoGameState {
|
|||||||
LegoBackgroundColor* m_tempBackgroundColor; // 0x1c
|
LegoBackgroundColor* m_tempBackgroundColor; // 0x1c
|
||||||
LegoFullScreenMovie* m_fullScreenMovie; // 0x20
|
LegoFullScreenMovie* m_fullScreenMovie; // 0x20
|
||||||
|
|
||||||
// TODO: Most likely getters/setters are not used according to BETA for the following members:
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
MxS16 m_currentPlayerId; // 0x24
|
MxS16 m_currentPlayerId; // 0x24
|
||||||
MxS16 m_playerCount; // 0x26
|
MxS16 m_playerCount; // 0x26
|
||||||
Username m_players[9]; // 0x28
|
Username m_players[9]; // 0x28
|
||||||
History m_history; // 0xa6
|
History m_history; // 0xa6
|
||||||
undefined2 m_unk0x41a; // 0x41a
|
|
||||||
JukeboxScript::Script m_jukeboxMusic; // 0x41c
|
JukeboxScript::Script m_jukeboxMusic; // 0x41c
|
||||||
MxBool m_isDirty; // 0x420
|
MxBool m_isDirty; // 0x420
|
||||||
Area m_currentArea; // 0x424
|
Area m_currentArea; // 0x424
|
||||||
|
|||||||
@ -1644,6 +1644,7 @@ void LegoGameState::SerializeScoreHistory(MxS16 p_flags)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// FUNCTION: LEGO1 0x1003cea0
|
// FUNCTION: LEGO1 0x1003cea0
|
||||||
|
// FUNCTION: BETA10 0x10017840
|
||||||
void LegoGameState::SetCurrentAct(Act p_currentAct)
|
void LegoGameState::SetCurrentAct(Act p_currentAct)
|
||||||
{
|
{
|
||||||
m_currentAct = p_currentAct;
|
m_currentAct = p_currentAct;
|
||||||
|
|||||||
@ -393,7 +393,7 @@ MxResult LegoWorldPresenter::LoadWorldModel(ModelDbModel& p_model, SDL_IOStream*
|
|||||||
}
|
}
|
||||||
|
|
||||||
modelPresenter.SetAction(&action);
|
modelPresenter.SetAction(&action);
|
||||||
modelPresenter.FUN_1007ff70(chunk, createdEntity, p_model.m_unk0x34, p_world);
|
modelPresenter.FUN_1007ff70(chunk, createdEntity, p_model.m_visible, p_world);
|
||||||
delete[] buff;
|
delete[] buff;
|
||||||
|
|
||||||
return SUCCESS;
|
return SUCCESS;
|
||||||
|
|||||||
@ -489,7 +489,7 @@ MxResult Act3::Create(MxDSAction& p_dsAction)
|
|||||||
case LegoGameState::e_act1:
|
case LegoGameState::e_act1:
|
||||||
case LegoGameState::e_actNotFound:
|
case LegoGameState::e_actNotFound:
|
||||||
GameState()->StopArea(LegoGameState::e_undefined);
|
GameState()->StopArea(LegoGameState::e_undefined);
|
||||||
if (GameState()->GetPreviousArea() == LegoGameState::e_infomain) {
|
if (GameState()->m_previousArea == LegoGameState::e_infomain) {
|
||||||
GameState()->StopArea(LegoGameState::e_isle);
|
GameState()->StopArea(LegoGameState::e_isle);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -506,7 +506,7 @@ MxResult Act3::Create(MxDSAction& p_dsAction)
|
|||||||
|
|
||||||
GameState()->m_currentArea = LegoGameState::e_act3script;
|
GameState()->m_currentArea = LegoGameState::e_act3script;
|
||||||
GameState()->SetCurrentAct(LegoGameState::e_act3);
|
GameState()->SetCurrentAct(LegoGameState::e_act3);
|
||||||
GameState()->SetDirty(TRUE);
|
GameState()->m_isDirty = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
@ -884,7 +884,7 @@ void Act3::Enable(MxBool p_enable)
|
|||||||
|
|
||||||
FUN_10015820(FALSE, LegoOmni::c_disableInput | LegoOmni::c_disable3d | LegoOmni::c_clearScreen);
|
FUN_10015820(FALSE, LegoOmni::c_disableInput | LegoOmni::c_disable3d | LegoOmni::c_clearScreen);
|
||||||
PlayMusic(JukeboxScript::c_Act3Music);
|
PlayMusic(JukeboxScript::c_Act3Music);
|
||||||
GameState()->SetDirty(TRUE);
|
GameState()->m_isDirty = TRUE;
|
||||||
|
|
||||||
if (m_time > 0) {
|
if (m_time > 0) {
|
||||||
MxFloat delta = Timer()->GetTime() - m_time - 100.0f;
|
MxFloat delta = Timer()->GetTime() - m_time - 100.0f;
|
||||||
|
|||||||
@ -219,7 +219,7 @@ MxResult Infocenter::Create(MxDSAction& p_dsAction)
|
|||||||
|
|
||||||
if (m_infocenterState->m_unk0x74 == 4) {
|
if (m_infocenterState->m_unk0x74 == 4) {
|
||||||
LegoGameState* state = GameState();
|
LegoGameState* state = GameState();
|
||||||
state->SetPreviousArea(GameState()->GetUnknown0x42c());
|
state->m_previousArea = GameState()->m_unk0x42c;
|
||||||
}
|
}
|
||||||
|
|
||||||
InputManager()->Register(this);
|
InputManager()->Register(this);
|
||||||
@ -1024,13 +1024,13 @@ MxU8 Infocenter::HandleControl(LegoControlManagerNotificationParam& p_param)
|
|||||||
case InfomainScript::c_BigInfo_Ctl:
|
case InfomainScript::c_BigInfo_Ctl:
|
||||||
switch (state->GetCurrentAct()) {
|
switch (state->GetCurrentAct()) {
|
||||||
case LegoGameState::e_act1:
|
case LegoGameState::e_act1:
|
||||||
if (state->GetPreviousArea()) {
|
if (state->m_previousArea) {
|
||||||
switch (state->GetPreviousArea()) {
|
switch (state->m_previousArea) {
|
||||||
case LegoGameState::e_infodoor:
|
case LegoGameState::e_infodoor:
|
||||||
case LegoGameState::e_regbook:
|
case LegoGameState::e_regbook:
|
||||||
case LegoGameState::e_infoscor:
|
case LegoGameState::e_infoscor:
|
||||||
m_infocenterState->m_unk0x74 = 5;
|
m_infocenterState->m_unk0x74 = 5;
|
||||||
m_destLocation = state->GetPreviousArea();
|
m_destLocation = state->m_previousArea;
|
||||||
actionToPlay = (InfomainScript::Script) m_infocenterState->GetNextLeaveDialogue();
|
actionToPlay = (InfomainScript::Script) m_infocenterState->GetNextLeaveDialogue();
|
||||||
m_radio.Stop();
|
m_radio.Stop();
|
||||||
InputManager()->DisableInputProcessing();
|
InputManager()->DisableInputProcessing();
|
||||||
@ -1085,7 +1085,7 @@ MxU8 Infocenter::HandleControl(LegoControlManagerNotificationParam& p_param)
|
|||||||
actionToPlay = GameState()->GetCurrentAct() != LegoGameState::e_act1 ? InfomainScript::c_GoTo_RegBook_Red
|
actionToPlay = GameState()->GetCurrentAct() != LegoGameState::e_act1 ? InfomainScript::c_GoTo_RegBook_Red
|
||||||
: InfomainScript::c_GoTo_RegBook;
|
: InfomainScript::c_GoTo_RegBook;
|
||||||
m_radio.Stop();
|
m_radio.Stop();
|
||||||
GameState()->m_unk0x42c = GameState()->GetPreviousArea();
|
GameState()->m_unk0x42c = GameState()->m_previousArea;
|
||||||
InputManager()->DisableInputProcessing();
|
InputManager()->DisableInputProcessing();
|
||||||
break;
|
break;
|
||||||
case InfomainScript::c_Mama_Ctl:
|
case InfomainScript::c_Mama_Ctl:
|
||||||
@ -1394,7 +1394,7 @@ void Infocenter::Reset()
|
|||||||
AnimationManager()->Reset(FALSE);
|
AnimationManager()->Reset(FALSE);
|
||||||
CharacterManager()->ReleaseAllActors();
|
CharacterManager()->ReleaseAllActors();
|
||||||
GameState()->SetCurrentAct(LegoGameState::e_act1);
|
GameState()->SetCurrentAct(LegoGameState::e_act1);
|
||||||
GameState()->SetPreviousArea(LegoGameState::e_undefined);
|
GameState()->m_previousArea = LegoGameState::e_undefined;
|
||||||
GameState()->m_unk0x42c = LegoGameState::e_undefined;
|
GameState()->m_unk0x42c = LegoGameState::e_undefined;
|
||||||
|
|
||||||
InitializeBitmaps();
|
InitializeBitmaps();
|
||||||
|
|||||||
@ -121,7 +121,7 @@ MxResult Isle::Create(MxDSAction& p_dsAction)
|
|||||||
m_act1state = act1state;
|
m_act1state = act1state;
|
||||||
|
|
||||||
EnableAnimations(TRUE);
|
EnableAnimations(TRUE);
|
||||||
GameState()->SetDirty(TRUE);
|
GameState()->m_isDirty = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
|
|||||||
@ -141,7 +141,7 @@ MxResult LegoAct2::Create(MxDSAction& p_dsAction)
|
|||||||
case LegoGameState::e_act1:
|
case LegoGameState::e_act1:
|
||||||
case LegoGameState::e_actNotFound:
|
case LegoGameState::e_actNotFound:
|
||||||
GameState()->StopArea(LegoGameState::e_undefined);
|
GameState()->StopArea(LegoGameState::e_undefined);
|
||||||
if (GameState()->GetPreviousArea() == LegoGameState::e_infomain) {
|
if (GameState()->m_previousArea == LegoGameState::e_infomain) {
|
||||||
GameState()->StopArea(LegoGameState::e_isle);
|
GameState()->StopArea(LegoGameState::e_isle);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -149,7 +149,7 @@ MxResult LegoAct2::Create(MxDSAction& p_dsAction)
|
|||||||
GameState()->m_currentArea = LegoGameState::e_act2main;
|
GameState()->m_currentArea = LegoGameState::e_act2main;
|
||||||
GameState()->SetCurrentAct(LegoGameState::e_act2);
|
GameState()->SetCurrentAct(LegoGameState::e_act2);
|
||||||
InputManager()->Register(this);
|
InputManager()->Register(this);
|
||||||
GameState()->SetDirty(TRUE);
|
GameState()->m_isDirty = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
@ -536,7 +536,7 @@ void LegoAct2::Enable(MxBool p_enable)
|
|||||||
|
|
||||||
((IslePathActor*) m_pepper->GetEntity())->VTable0xec(m_unk0x10dc, m_unk0x1124, TRUE);
|
((IslePathActor*) m_pepper->GetEntity())->VTable0xec(m_unk0x10dc, m_unk0x1124, TRUE);
|
||||||
|
|
||||||
if (GameState()->GetPreviousArea() == LegoGameState::e_infomain) {
|
if (GameState()->m_previousArea == LegoGameState::e_infomain) {
|
||||||
GameState()->StopArea(LegoGameState::e_infomain);
|
GameState()->StopArea(LegoGameState::e_infomain);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -52,7 +52,7 @@ MxResult ModelDbModel::Read(SDL_IOStream* p_file)
|
|||||||
if (SDL_ReadIO(p_file, m_up, 3 * sizeof(float)) != 3 * sizeof(float)) {
|
if (SDL_ReadIO(p_file, m_up, 3 * sizeof(float)) != 3 * sizeof(float)) {
|
||||||
return FAILURE;
|
return FAILURE;
|
||||||
}
|
}
|
||||||
if (SDL_ReadIO(p_file, &m_unk0x34, sizeof(undefined)) != sizeof(undefined)) {
|
if (SDL_ReadIO(p_file, &m_visible, sizeof(MxU8)) != sizeof(MxU8)) {
|
||||||
return FAILURE;
|
return FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -102,7 +102,7 @@ struct ModelDbModel {
|
|||||||
float m_location[3]; // 0x10
|
float m_location[3]; // 0x10
|
||||||
float m_direction[3]; // 0x1c
|
float m_direction[3]; // 0x1c
|
||||||
float m_up[3]; // 0x28
|
float m_up[3]; // 0x28
|
||||||
undefined m_unk0x34; // 0x34
|
MxU8 m_visible; // 0x34
|
||||||
};
|
};
|
||||||
|
|
||||||
// SIZE 0x18
|
// SIZE 0x18
|
||||||
|
|||||||
@ -867,4 +867,7 @@ inline D3DRMMATERIALMODE Translate(MaterialMode mode)
|
|||||||
// GLOBAL: LEGO1 0x100dd1e0
|
// GLOBAL: LEGO1 0x100dd1e0
|
||||||
// IID_IDirect3DRMMeshBuilder
|
// IID_IDirect3DRMMeshBuilder
|
||||||
|
|
||||||
|
// GLOBAL: LEGO1 0x100dd1f0
|
||||||
|
// IID_IDirect3DRMMesh
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@ -15,6 +15,7 @@ void* MeshBuilderImpl::ImplementationDataPtr()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// FUNCTION: LEGO1 0x100a3840
|
// FUNCTION: LEGO1 0x100a3840
|
||||||
|
// FUNCTION: BETA10 0x1016ca40
|
||||||
Mesh* MeshBuilderImpl::CreateMesh(
|
Mesh* MeshBuilderImpl::CreateMesh(
|
||||||
unsigned int faceCount,
|
unsigned int faceCount,
|
||||||
unsigned int vertexCount,
|
unsigned int vertexCount,
|
||||||
@ -26,6 +27,8 @@ Mesh* MeshBuilderImpl::CreateMesh(
|
|||||||
ShadingModel shadingModel
|
ShadingModel shadingModel
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
assert(m_data);
|
||||||
|
|
||||||
MeshImpl* pMeshImpl = new MeshImpl;
|
MeshImpl* pMeshImpl = new MeshImpl;
|
||||||
if (CreateMeshImpl(
|
if (CreateMeshImpl(
|
||||||
pMeshImpl,
|
pMeshImpl,
|
||||||
@ -45,63 +48,67 @@ Mesh* MeshBuilderImpl::CreateMesh(
|
|||||||
return pMeshImpl;
|
return pMeshImpl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// FUNCTION: BETA10 0x1016fef0
|
||||||
inline Result CreateMesh(
|
inline Result CreateMesh(
|
||||||
IDirect3DRMMesh* pD3DRM,
|
IDirect3DRMMesh* pD3DRM,
|
||||||
unsigned int faceCount,
|
unsigned int p_numFaces,
|
||||||
unsigned int vertexCount,
|
unsigned int p_numVertices,
|
||||||
float (*pPositions)[3],
|
float (*p_positions)[3],
|
||||||
float (*pNormals)[3],
|
float (*p_normals)[3],
|
||||||
float (*pTextureCoordinates)[2],
|
float (*p_textureCoordinates)[2],
|
||||||
unsigned int (*pFaceIndices)[3],
|
unsigned int (*p_faceIndices)[3],
|
||||||
unsigned int (*pTextureIndices)[3],
|
unsigned int (*p_textureIndices)[3],
|
||||||
ShadingModel shadingModel,
|
ShadingModel shadingModel,
|
||||||
MeshImpl::MeshDataType& rpMesh
|
MeshImpl::MeshDataType& rpMesh
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
unsigned int* faceIndices = (unsigned int*) pFaceIndices;
|
unsigned short* faceIndices = (unsigned short*) p_faceIndices;
|
||||||
D3DRMGROUPINDEX groupIndex = 0;
|
D3DRMGROUPINDEX groupIndex = 0;
|
||||||
int count = faceCount * 3;
|
int faceCount = p_numFaces * 3;
|
||||||
int index = 0;
|
int count = 0;
|
||||||
|
|
||||||
unsigned int* fData = new unsigned int[count];
|
unsigned int* fData = new unsigned int[faceCount];
|
||||||
|
|
||||||
D3DRMVERTEX* vertices = new D3DRMVERTEX[vertexCount];
|
D3DRMVERTEX* vertices = new D3DRMVERTEX[p_numVertices];
|
||||||
memset(vertices, 0, sizeof(*vertices) * vertexCount);
|
memset(vertices, 0, sizeof(*vertices) * p_numVertices);
|
||||||
|
|
||||||
rpMesh = new MeshImpl::MeshData;
|
rpMesh = new MeshImpl::MeshData;
|
||||||
rpMesh->groupMesh = pD3DRM;
|
rpMesh->groupMesh = pD3DRM;
|
||||||
|
|
||||||
for (int i = 0; i < count; i++) {
|
for (int i = 0; i < faceCount; i++) {
|
||||||
if ((*((unsigned short*) &faceIndices[i] + 1) >> 0x0f) & 0x01) {
|
if (((faceIndices[2 * i + 1]) >> 0x0f) & 0x01) {
|
||||||
unsigned int j = *(unsigned short*) &faceIndices[i];
|
unsigned int j = 3 * faceIndices[2 * i];
|
||||||
vertices[index].position.x = pPositions[j][0];
|
vertices[count].position.x = p_positions[j];
|
||||||
vertices[index].position.y = pPositions[j][1];
|
vertices[count].position.y = p_positions[j + 1];
|
||||||
vertices[index].position.z = pPositions[j][2];
|
vertices[count].position.z = p_positions[j + 2];
|
||||||
j = *((unsigned short*) &faceIndices[i] + 1) & MAXSHORT;
|
|
||||||
vertices[index].normal.x = pNormals[j][0];
|
|
||||||
vertices[index].normal.y = pNormals[j][1];
|
|
||||||
vertices[index].normal.z = pNormals[j][2];
|
|
||||||
|
|
||||||
if (pTextureIndices != NULL && pTextureCoordinates != NULL) {
|
int k = 3 * (faceIndices[2 * i + 1] & MAXSHORT);
|
||||||
j = ((unsigned int*) pTextureIndices)[i];
|
vertices[count].normal.x = p_normals[k];
|
||||||
vertices[index].tu = pTextureCoordinates[j][0];
|
vertices[count].normal.y = p_normals[k + 1];
|
||||||
vertices[index].tv = pTextureCoordinates[j][1];
|
vertices[count].normal.z = p_normals[k + 2];
|
||||||
|
|
||||||
|
if (p_textureIndices != NULL && p_textureCoordinates != NULL) {
|
||||||
|
int kk = 2 * ((unsigned int*) p_textureIndices)[i];
|
||||||
|
vertices[count].tu = p_textureCoordinates[kk];
|
||||||
|
vertices[count].tv = p_textureCoordinates[kk + 1];
|
||||||
}
|
}
|
||||||
|
|
||||||
fData[i] = index;
|
fData[i] = count;
|
||||||
index++;
|
count++;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
fData[i] = *(unsigned short*) &faceIndices[i];
|
fData[i] = faceIndices[2 * i];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
assert(count == (int) p_numVertices);
|
||||||
|
|
||||||
Result result;
|
Result result;
|
||||||
result = ResultVal(pD3DRM->AddGroup(vertexCount, faceCount, 3, fData, &groupIndex));
|
result = ResultVal(pD3DRM->AddGroup(p_numVertices, p_numFaces, 3, fData, &groupIndex));
|
||||||
|
|
||||||
if (Succeeded(result)) {
|
if (Succeeded(result)) {
|
||||||
rpMesh->groupIndex = groupIndex;
|
rpMesh->groupIndex = groupIndex;
|
||||||
result = ResultVal(pD3DRM->SetVertices(groupIndex, 0, vertexCount, vertices));
|
result = ResultVal(pD3DRM->SetVertices(groupIndex, 0, p_numVertices, vertices));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!Succeeded(result)) {
|
if (!Succeeded(result)) {
|
||||||
@ -112,6 +119,7 @@ inline Result CreateMesh(
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
result = MeshSetTextureMappingMode(rpMesh, PerspectiveCorrect);
|
result = MeshSetTextureMappingMode(rpMesh, PerspectiveCorrect);
|
||||||
|
assert(Succeeded(result));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fData != NULL) {
|
if (fData != NULL) {
|
||||||
@ -125,6 +133,7 @@ inline Result CreateMesh(
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// FUNCTION: BETA10 0x1016fe40
|
||||||
inline Result MeshBuilderImpl::CreateMeshImpl(
|
inline Result MeshBuilderImpl::CreateMeshImpl(
|
||||||
MeshImpl* pMeshImpl,
|
MeshImpl* pMeshImpl,
|
||||||
unsigned int faceCount,
|
unsigned int faceCount,
|
||||||
@ -137,13 +146,16 @@ inline Result MeshBuilderImpl::CreateMeshImpl(
|
|||||||
ShadingModel shadingModel
|
ShadingModel shadingModel
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
assert(m_data);
|
||||||
|
assert(!pMeshImpl->ImplementationData());
|
||||||
|
|
||||||
return ::CreateMesh(
|
return ::CreateMesh(
|
||||||
m_data,
|
m_data,
|
||||||
faceCount,
|
faceCount,
|
||||||
vertexCount,
|
vertexCount,
|
||||||
pPositions,
|
reinterpret_cast<float*>(pPositions),
|
||||||
pNormals,
|
reinterpret_cast<float*>(pNormals),
|
||||||
pTextureCoordinates,
|
reinterpret_cast<float*>(pTextureCoordinates),
|
||||||
pFaceIndices,
|
pFaceIndices,
|
||||||
pTextureIndices,
|
pTextureIndices,
|
||||||
shadingModel,
|
shadingModel,
|
||||||
|
|||||||
165
LICENSE
Normal file
165
LICENSE
Normal file
@ -0,0 +1,165 @@
|
|||||||
|
GNU LESSER GENERAL PUBLIC LICENSE
|
||||||
|
Version 3, 29 June 2007
|
||||||
|
|
||||||
|
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
|
||||||
|
Everyone is permitted to copy and distribute verbatim copies
|
||||||
|
of this license document, but changing it is not allowed.
|
||||||
|
|
||||||
|
|
||||||
|
This version of the GNU Lesser General Public License incorporates
|
||||||
|
the terms and conditions of version 3 of the GNU General Public
|
||||||
|
License, supplemented by the additional permissions listed below.
|
||||||
|
|
||||||
|
0. Additional Definitions.
|
||||||
|
|
||||||
|
As used herein, "this License" refers to version 3 of the GNU Lesser
|
||||||
|
General Public License, and the "GNU GPL" refers to version 3 of the GNU
|
||||||
|
General Public License.
|
||||||
|
|
||||||
|
"The Library" refers to a covered work governed by this License,
|
||||||
|
other than an Application or a Combined Work as defined below.
|
||||||
|
|
||||||
|
An "Application" is any work that makes use of an interface provided
|
||||||
|
by the Library, but which is not otherwise based on the Library.
|
||||||
|
Defining a subclass of a class defined by the Library is deemed a mode
|
||||||
|
of using an interface provided by the Library.
|
||||||
|
|
||||||
|
A "Combined Work" is a work produced by combining or linking an
|
||||||
|
Application with the Library. The particular version of the Library
|
||||||
|
with which the Combined Work was made is also called the "Linked
|
||||||
|
Version".
|
||||||
|
|
||||||
|
The "Minimal Corresponding Source" for a Combined Work means the
|
||||||
|
Corresponding Source for the Combined Work, excluding any source code
|
||||||
|
for portions of the Combined Work that, considered in isolation, are
|
||||||
|
based on the Application, and not on the Linked Version.
|
||||||
|
|
||||||
|
The "Corresponding Application Code" for a Combined Work means the
|
||||||
|
object code and/or source code for the Application, including any data
|
||||||
|
and utility programs needed for reproducing the Combined Work from the
|
||||||
|
Application, but excluding the System Libraries of the Combined Work.
|
||||||
|
|
||||||
|
1. Exception to Section 3 of the GNU GPL.
|
||||||
|
|
||||||
|
You may convey a covered work under sections 3 and 4 of this License
|
||||||
|
without being bound by section 3 of the GNU GPL.
|
||||||
|
|
||||||
|
2. Conveying Modified Versions.
|
||||||
|
|
||||||
|
If you modify a copy of the Library, and, in your modifications, a
|
||||||
|
facility refers to a function or data to be supplied by an Application
|
||||||
|
that uses the facility (other than as an argument passed when the
|
||||||
|
facility is invoked), then you may convey a copy of the modified
|
||||||
|
version:
|
||||||
|
|
||||||
|
a) under this License, provided that you make a good faith effort to
|
||||||
|
ensure that, in the event an Application does not supply the
|
||||||
|
function or data, the facility still operates, and performs
|
||||||
|
whatever part of its purpose remains meaningful, or
|
||||||
|
|
||||||
|
b) under the GNU GPL, with none of the additional permissions of
|
||||||
|
this License applicable to that copy.
|
||||||
|
|
||||||
|
3. Object Code Incorporating Material from Library Header Files.
|
||||||
|
|
||||||
|
The object code form of an Application may incorporate material from
|
||||||
|
a header file that is part of the Library. You may convey such object
|
||||||
|
code under terms of your choice, provided that, if the incorporated
|
||||||
|
material is not limited to numerical parameters, data structure
|
||||||
|
layouts and accessors, or small macros, inline functions and templates
|
||||||
|
(ten or fewer lines in length), you do both of the following:
|
||||||
|
|
||||||
|
a) Give prominent notice with each copy of the object code that the
|
||||||
|
Library is used in it and that the Library and its use are
|
||||||
|
covered by this License.
|
||||||
|
|
||||||
|
b) Accompany the object code with a copy of the GNU GPL and this license
|
||||||
|
document.
|
||||||
|
|
||||||
|
4. Combined Works.
|
||||||
|
|
||||||
|
You may convey a Combined Work under terms of your choice that,
|
||||||
|
taken together, effectively do not restrict modification of the
|
||||||
|
portions of the Library contained in the Combined Work and reverse
|
||||||
|
engineering for debugging such modifications, if you also do each of
|
||||||
|
the following:
|
||||||
|
|
||||||
|
a) Give prominent notice with each copy of the Combined Work that
|
||||||
|
the Library is used in it and that the Library and its use are
|
||||||
|
covered by this License.
|
||||||
|
|
||||||
|
b) Accompany the Combined Work with a copy of the GNU GPL and this license
|
||||||
|
document.
|
||||||
|
|
||||||
|
c) For a Combined Work that displays copyright notices during
|
||||||
|
execution, include the copyright notice for the Library among
|
||||||
|
these notices, as well as a reference directing the user to the
|
||||||
|
copies of the GNU GPL and this license document.
|
||||||
|
|
||||||
|
d) Do one of the following:
|
||||||
|
|
||||||
|
0) Convey the Minimal Corresponding Source under the terms of this
|
||||||
|
License, and the Corresponding Application Code in a form
|
||||||
|
suitable for, and under terms that permit, the user to
|
||||||
|
recombine or relink the Application with a modified version of
|
||||||
|
the Linked Version to produce a modified Combined Work, in the
|
||||||
|
manner specified by section 6 of the GNU GPL for conveying
|
||||||
|
Corresponding Source.
|
||||||
|
|
||||||
|
1) Use a suitable shared library mechanism for linking with the
|
||||||
|
Library. A suitable mechanism is one that (a) uses at run time
|
||||||
|
a copy of the Library already present on the user's computer
|
||||||
|
system, and (b) will operate properly with a modified version
|
||||||
|
of the Library that is interface-compatible with the Linked
|
||||||
|
Version.
|
||||||
|
|
||||||
|
e) Provide Installation Information, but only if you would otherwise
|
||||||
|
be required to provide such information under section 6 of the
|
||||||
|
GNU GPL, and only to the extent that such information is
|
||||||
|
necessary to install and execute a modified version of the
|
||||||
|
Combined Work produced by recombining or relinking the
|
||||||
|
Application with a modified version of the Linked Version. (If
|
||||||
|
you use option 4d0, the Installation Information must accompany
|
||||||
|
the Minimal Corresponding Source and Corresponding Application
|
||||||
|
Code. If you use option 4d1, you must provide the Installation
|
||||||
|
Information in the manner specified by section 6 of the GNU GPL
|
||||||
|
for conveying Corresponding Source.)
|
||||||
|
|
||||||
|
5. Combined Libraries.
|
||||||
|
|
||||||
|
You may place library facilities that are a work based on the
|
||||||
|
Library side by side in a single library together with other library
|
||||||
|
facilities that are not Applications and are not covered by this
|
||||||
|
License, and convey such a combined library under terms of your
|
||||||
|
choice, if you do both of the following:
|
||||||
|
|
||||||
|
a) Accompany the combined library with a copy of the same work based
|
||||||
|
on the Library, uncombined with any other library facilities,
|
||||||
|
conveyed under the terms of this License.
|
||||||
|
|
||||||
|
b) Give prominent notice with the combined library that part of it
|
||||||
|
is a work based on the Library, and explaining where to find the
|
||||||
|
accompanying uncombined form of the same work.
|
||||||
|
|
||||||
|
6. Revised Versions of the GNU Lesser General Public License.
|
||||||
|
|
||||||
|
The Free Software Foundation may publish revised and/or new versions
|
||||||
|
of the GNU Lesser General Public License from time to time. Such new
|
||||||
|
versions will be similar in spirit to the present version, but may
|
||||||
|
differ in detail to address new problems or concerns.
|
||||||
|
|
||||||
|
Each version is given a distinguishing version number. If the
|
||||||
|
Library as you received it specifies that a certain numbered version
|
||||||
|
of the GNU Lesser General Public License "or any later version"
|
||||||
|
applies to it, you have the option of following the terms and
|
||||||
|
conditions either of that published version or of any later version
|
||||||
|
published by the Free Software Foundation. If the Library as you
|
||||||
|
received it does not specify a version number of the GNU Lesser
|
||||||
|
General Public License, you may choose any version of the GNU Lesser
|
||||||
|
General Public License ever published by the Free Software Foundation.
|
||||||
|
|
||||||
|
If the Library as you received it specifies that a proxy can decide
|
||||||
|
whether future versions of the GNU Lesser General Public License shall
|
||||||
|
apply, that proxy's public statement of acceptance of any version is
|
||||||
|
permanent authorization for you to choose that version for the
|
||||||
|
Library.
|
||||||
Loading…
Reference in New Issue
Block a user