void FBXProgram::Draw(glm::mat4 projectionView, Camera* camera) { //Frustrum culling collider->Update((glm::vec3)position[3]); if (CollisionDetection::DetectCollision(collider, camera, name) == false) return; GLuint program = GetProgramID(); glUseProgram(program); //bind camera unsigned int loc = glGetUniformLocation(program, "ProjectionView"); glUniformMatrix4fv(loc, 1, GL_FALSE, glm::value_ptr(projectionView)); loc = glGetUniformLocation(program, "lightDirection"); glm::vec3 lightDirection = glm::normalize(glm::vec3(1, 1, 1)); glUniform3f(loc, lightDirection.x, lightDirection.y, lightDirection.z); loc = glGetUniformLocation(program, "lightColor"); glUniform3f(loc, 1.f, 1.f, 1.f); loc = glGetUniformLocation(program, "diffuse"); glUniform1i(loc, 0); loc = glGetUniformLocation(program, "World"); glUniformMatrix4fv(loc, 1, GL_FALSE, glm::value_ptr(position)); //Bind vertex array object and draw mesh for (unsigned int i = 0; i < fbx->getMeshCount(); ++i) { FBXMeshNode* mesh = fbx->getMeshByIndex(i); Mesh* glData = (Mesh*)mesh->m_userData; FBXTexture* texture = mesh->m_material->textures[FBXMaterial::DiffuseTexture]; if (texture != nullptr) { glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, texture->handle); } glBindVertexArray(glData->GetVAO()); glDrawElements(GL_TRIANGLES, (unsigned int)glData->GetIndexCount(), GL_UNSIGNED_INT, 0); } }
int SetCommonHeaderBasicData(ncch_settings *set, ncch_hdr *hdr) { /* NCCH Magic */ memcpy(hdr->magic,"NCCH",4); /* NCCH Format Version */ if(!set->options.IsCfa) u16_to_u8(hdr->formatVersion,0x2,LE); /* Setting ProgramId/TitleId */ u64 programId = 0; int result = GetProgramID(&programId,set->rsfSet,false); if(result) return result; u64_to_u8(hdr->programId,programId,LE); u64_to_u8(hdr->titleId,programId,LE); /* Get Product Code and Maker Code */ if(set->rsfSet->BasicInfo.ProductCode){ if(!IsValidProductCode((char*)set->rsfSet->BasicInfo.ProductCode,set->options.FreeProductCode)){ fprintf(stderr,"[NCCH ERROR] Invalid Product Code\n"); return NCCH_BAD_RSF_SET; } memcpy(hdr->productCode,set->rsfSet->BasicInfo.ProductCode,strlen((char*)set->rsfSet->BasicInfo.ProductCode)); } else memcpy(hdr->productCode,"CTR-P-CTAP",10); if(set->rsfSet->BasicInfo.CompanyCode){ if(strlen((char*)set->rsfSet->BasicInfo.CompanyCode) != 2){ fprintf(stderr,"[NCCH ERROR] CompanyCode length must be 2\n"); return NCCH_BAD_RSF_SET; } memcpy(hdr->makerCode,set->rsfSet->BasicInfo.CompanyCode,2); } else memcpy(hdr->makerCode,"00",2); // Setting Encryption Settings if(!set->options.Encrypt) hdr->flags[ncchflag_OTHER_FLAG] = (otherflag_NoCrypto|otherflag_FixedCryptoKey); else if(set->options.useSecCrypto){ hdr->flags[ncchflag_OTHER_FLAG] = otherflag_Clear; hdr->flags[ncchflag_CONTENT_KEYX] = set->options.keyXID; } else hdr->flags[ncchflag_OTHER_FLAG] = otherflag_FixedCryptoKey; if(!SetNcchKeys(set->keys,hdr) && set->options.Encrypt){ hdr->flags[ncchflag_OTHER_FLAG] = (otherflag_NoCrypto|otherflag_FixedCryptoKey); hdr->flags[ncchflag_CONTENT_KEYX] = 0; set->options.Encrypt = false; fprintf(stderr,"[NCCH WARNING] NCCH AES Key could not be loaded, NCCH will not be encrypted\n"); } /* Set ContentUnitSize */ hdr->flags[ncchflag_CONTENT_BLOCK_SIZE] = GetCtrBlockSizeFlag(set->options.blockSize); /* Setting ContentPlatform */ hdr->flags[ncchflag_CONTENT_PLATFORM] = 1; // CTR /* Setting OtherFlag */ if(!set->options.UseRomFS) hdr->flags[ncchflag_OTHER_FLAG] |= otherflag_NoMountRomFs; /* Setting ContentType */ hdr->flags[ncchflag_CONTENT_TYPE] = 0; if(set->options.UseRomFS) hdr->flags[ncchflag_CONTENT_TYPE] |= content_Data; if(!set->options.IsCfa) hdr->flags[ncchflag_CONTENT_TYPE] |= content_Executable; if(set->rsfSet->BasicInfo.ContentType){ if(strcmp(set->rsfSet->BasicInfo.ContentType,"Application") == 0) hdr->flags[ncchflag_CONTENT_TYPE] |= 0; else if(strcmp(set->rsfSet->BasicInfo.ContentType,"SystemUpdate") == 0) hdr->flags[ncchflag_CONTENT_TYPE] |= content_SystemUpdate; else if(strcmp(set->rsfSet->BasicInfo.ContentType,"Manual") == 0) hdr->flags[ncchflag_CONTENT_TYPE] |= content_Manual; else if(strcmp(set->rsfSet->BasicInfo.ContentType,"Child") == 0) hdr->flags[ncchflag_CONTENT_TYPE] |= content_Child; else if(strcmp(set->rsfSet->BasicInfo.ContentType,"Trial") == 0) hdr->flags[ncchflag_CONTENT_TYPE] |= content_Trial; else{ fprintf(stderr,"[NCCH ERROR] Invalid ContentType '%s'\n",set->rsfSet->BasicInfo.ContentType); return NCCH_BAD_RSF_SET; } } return 0; }