void CPUTGUIElement::Resize(int x, int y, int width, int height, int windowWidth, int windowHeight)
{
    if(mParentRelative)
    {
        mPosX = mRelX + x;
        mPosY = mRelY + y;
        if(mRelX < 0)
            mPosX += width;
        if(mRelY < 0)
            mPosY += height;
    }
    else
    {
        mPosX = mRelX;
        mPosY = mRelY;
        if(mRelX < 0)
            mPosX += windowWidth;
        if(mRelY < 0)
            mPosY += windowHeight;
    }

    float4x4 m = float4x4Translation((float)mPosX, (float)mPosY, 0);
    SetParentMatrix(m);
    CPUTRenderNode* pNode = mpChild;
    if(pNode)
    {
        ((CPUTGUIElement*)pNode)->Resize(mPosX, mPosY, mWidth, mHeight, windowWidth, windowHeight);
    }
    pNode = mpSibling;
    while(pNode)
    {
        ((CPUTGUIElement*)pNode)->Resize(x, y, width, height, windowWidth, windowHeight);
        pNode = pNode->GetSibling();
    }
}
Ejemplo n.º 2
0
void DrawBox(CPUTRenderParameters &renderParams, float3 position, float3 size, CPUTColor4 color)
{
	size *= 0.01f;
	float4x4 parentMatrix = float4x4Scale(size) * float4x4Translation(position);
	gUtilGlob.boxModel->SetParentMatrix(parentMatrix);
	gUtilGlob.boxModel->mUserData1 = color.ToFloat4();
	gUtilGlob.boxModel->Render(renderParams, 0);
}
Ejemplo n.º 3
0
void MySample::UpdateMatrixBuffers()
{
    // Update GUI
    int rows = currentRowCount;
    int columns = currentColCount;
    int index = 0;
    float angle_value = 360.0 / columns;
    float radius = (columns / k2Pi);
    for (int i = 0; i < rows; ++i)
    {
        int add_value = 0;
        for (int j = 0; j < columns; ++j)
        {
            if( (i % 2) == 0 )
            {
                add_value = angle_value + (angle_value / 2.0);
            }
            world[index] = float4x4RotationY( kPi / 2.0f) *
                           float4x4Translation(float3(0.0f, 0.0f + (100.0f * i), 100.0f * radius)) *
                           float4x4RotationY( DegreesToRadians(add_value + (angle_value * j)));
            ++index;
        }
    }

    // Now update buffer
    const int numInstances = columns * rows;

    // Support shader
    CPUTMaterialEffectOGL *pMatEffect = (CPUTMaterialEffectOGL*) supportMaterial->GetMaterialEffects()[0];
    DEBUG_PRINT("pMatEffect: %p", pMatEffect);
    GLuint shaderProgID = pMatEffect->GetShaderID();
    DEBUG_PRINT("shaderProgID: %d", shaderProgID);
    GLuint worldMatrixBufferLoc = glGetUniformLocation( shaderProgID, "instancedWorld" );
    DEBUG_PRINT("worldMatrixBufferLoc: %d", worldMatrixBufferLoc);
    GL_CHECK(glUseProgram(shaderProgID));
    GL_CHECK(glUniformMatrix4fv( worldMatrixBufferLoc, numInstances, GL_FALSE, (const GLfloat *) &world[0] ));

    // Tech unit shader
    pMatEffect = (CPUTMaterialEffectOGL*) techMaterial->GetMaterialEffects()[0];
    assert(pMatEffect);
    shaderProgID = pMatEffect->GetShaderID();
    worldMatrixBufferLoc = glGetUniformLocation( shaderProgID, "instancedWorld" );
    GL_CHECK(glUseProgram(shaderProgID));
    GL_CHECK(glUniformMatrix4fv( worldMatrixBufferLoc, numInstances, GL_FALSE, (const GLfloat *) &world[0] ));

    GL_CHECK(glUseProgram(0));
}
Ejemplo n.º 4
0
void MySample::Update(double deltaSeconds)
{
	static double time = 0.0f;
	float rows = 0.0f;
	float columns = 0.0f;
	float angle_value = 0.0f;
	
	// Update cam
	lookY = cameraY / 4.0f;
	lookZ = lookY / 3.0f;
	
	time += (deltaSeconds);

	/* DEMO SECTION */
	if (time > 360.0f)
		time = 0.0f;
	float4 temp = float4(1.0f, 1.0f, 1.0f, 1.0f) * (float4x4RotationY( kPi / 2.0f) * 
		float4x4Translation(float3(0.0f, 0.0f, 50.0f * (9 / k2Pi))) *
							   float4x4RotationY( DegreesToRadians((40.0f * ( 0.5f * time)))));
	
	mpCamera->SetPosition( temp.x, cameraY, temp.z );
	mpCamera->LookAt( 1.0f, lookY, lookZ );
	/* END DEMO SECTION */

    mpCameraController->Update((float)deltaSeconds);
	currentTime = (float)deltaSeconds;
	fpsTime += (float) deltaSeconds;
	fpsCount++;
	fps = fpsCount / fpsTime;
	if( fpsTime >= 1.0f )
	{
		fpsTime = 0.0f;
		fpsCount = 0;
	}

	// Update GUI
	rows = (float) currentRowCount; // for slider
	columns = (float) currentColCount; // for slider
	angle_value = 360.0 / columns;
	stringstream textStream;
	const int numInstances = (int)columns * (int) rows;
	textStream << "FPS:"<< fps;
	pTextMethod->SetText(PrepareText(textStream), 0.5f);
}
void CPUTGUIElement::Render(CPUTRenderParameters &params, int materialIndex)
{
    if(mVisible)
    {
        if(mpSprite)
        {
            float4x4 world = float4x4Translation((float)mPosX, (float)mPosY, 0.0);
            float4x4 projection(*params.mpCamera->GetProjectionMatrix());
            mConstants.wvpMatrix = world*projection;
            mConstants.position.x = (float)mPosX;
            mConstants.position.y = (float)mPosY;
            mConstants.position.z = (float)mWidth;
            mConstants.position.w = (float)mHeight;
            if(mHighlighted)
                mConstants.backgroundcolor = mBackgroundHighlightColor;
            else
                mConstants.backgroundcolor = mBackgroundColor;
            mConstants.foregroundcolor = mForegroundColor;
            mConstants.resolution.x = (float)params.mWidth;
            mConstants.resolution.y = (float)params.mHeight;
            mConstants.mousePosition = mMousePosition;
#ifdef CPUT_FOR_DX11
            ID3D11DeviceContext *pDeviceContext = CPUT_DX11::GetContext();
            ID3D11Buffer *pBuffer = mpConstants->GetNativeBuffer();
            D3D11_MAPPED_SUBRESOURCE mapInfo;
            pDeviceContext->Map( pBuffer, 0, D3D11_MAP_WRITE_DISCARD, 0, &mapInfo );
            GUIConstants *pCb = (GUIConstants*)mapInfo.pData;
            memcpy(pCb, &mConstants, sizeof(GUIConstants));
            pDeviceContext->Unmap(pBuffer, 0);
#else
            mpConstants->SetSubData(0, sizeof(GUIConstants), &mConstants);
#endif
            mpSprite->DrawSprite(params);
        }
        if(mpTextMesh)
        {
            float4x4 world = float4x4Translation((float)(mTextX+mPosX), (float)(mTextY+mPosY), 0.0);
            float4x4 projection(*params.mpCamera->GetProjectionMatrix());
            mConstants.wvpMatrix = world*projection;
            mConstants.position.x = (float)mTextX+mPosX;
            mConstants.position.y = (float)mTextY+mPosY;
            mConstants.position.z = (float)mWidth;
            mConstants.position.w = (float)mHeight;
            mConstants.backgroundcolor = mBackgroundColor;
            if(mHighlighted)
                mConstants.foregroundcolor = mForegroundHighlightColor;
            else
                mConstants.foregroundcolor = mForegroundColor;
            mConstants.resolution.x = (float)params.mWidth;
            mConstants.resolution.y = (float)params.mHeight;
#ifdef CPUT_FOR_DX11
            ID3D11DeviceContext *pDeviceContext = CPUT_DX11::GetContext();
            ID3D11Buffer *pBuffer = mpConstants->GetNativeBuffer();
            D3D11_MAPPED_SUBRESOURCE mapInfo;
            pDeviceContext->Map( pBuffer, 0, D3D11_MAP_WRITE_DISCARD, 0, &mapInfo );
            GUIConstants *pCb = (GUIConstants*)mapInfo.pData;
            memcpy(pCb, &mConstants, sizeof(GUIConstants));
            pDeviceContext->Unmap(pBuffer, 0);
            mpTextMaterial->GetMaterialEffects()[mpTextMaterial->GetCurrentEffect()]->SetRenderStates(params);
            mpTextMesh->Draw(params, mpVertexLayout);
#else
            mpConstants->SetSubData(0, sizeof(GUIConstants), &mConstants);
            mpTextMaterial->GetMaterialEffects()[mpTextMaterial->GetCurrentEffect()]->SetRenderStates(params);
            mpTextMesh->Draw(params, NULL);

#endif
            
        }
    }
}
bool CPUTGUIElement::Load(CPUTConfigBlock* pBlock, int* pParent)
{
    CPUTConfigEntry* pEntry = NULL;

    pEntry = pBlock->GetValueByName(NAME);
    if (pEntry->IsValid())
        mName= pEntry->ValueAsString();

    pEntry = pBlock->GetValueByName(PARENT);
    if(pEntry->IsValid())
        *pParent = pEntry->ValueAsInt();

    pEntry = pBlock->GetValueByName(WIDTH);
    if(pEntry->IsValid())
        mWidth = pEntry->ValueAsInt();

    pEntry = pBlock->GetValueByName(HEIGHT);
    if(pEntry->IsValid())
        mHeight = pEntry->ValueAsInt();
    
    pEntry = pBlock->GetValueByName(POS_X);
    if(pEntry->IsValid())
        mRelX = pEntry->ValueAsInt();

    pEntry = pBlock->GetValueByName(POS_Y);
    if(pEntry->IsValid())
        mRelY = pEntry->ValueAsInt();
    
    pEntry = pBlock->GetValueByName(PARENT_RELATIVE);
    if(pEntry->IsValid())
        mParentRelative = pEntry->ValueAsBool();

    pEntry = pBlock->GetValueByName(VISIBLE);
    if(pEntry->IsValid())
        mVisible = pEntry->ValueAsBool();

    pEntry = pBlock->GetValueByName(FOREGROUND_COLOR);
    if(pEntry->IsValid())
    {
        pEntry->ValueAsFloatArray((float*)&mForegroundColor, 4);
        mForegroundHighlightColor = mForegroundColor;
    }

    pEntry = pBlock->GetValueByName(BACKGROUND_COLOR);
    if(pEntry->IsValid())
    {
        pEntry->ValueAsFloatArray((float*)&mBackgroundColor, 4);
        mBackgroundHighlightColor = mBackgroundColor;
    }
    pEntry = pBlock->GetValueByName(FOREGROUND_HIGHLIGHT_COLOR);
    if(pEntry->IsValid())
        pEntry->ValueAsFloatArray((float*)&mForegroundHighlightColor, 4);

    pEntry = pBlock->GetValueByName(BACKGROUND_HIGHLIGHT_COLOR);
    if(pEntry->IsValid())
        pEntry->ValueAsFloatArray((float*)&mBackgroundHighlightColor, 4);

    pEntry = pBlock->GetValueByName(MATERIAL);
    if(pEntry->IsValid())
    {
        cString materialName = pEntry->ValueAsString();
        mpSprite = CPUTSprite::CreateSprite(0.0, 0.0, 1.0, 1.0, materialName);
    }

    pEntry = pBlock->GetValueByName(TEXT_MATERIAL);
    if(pEntry->IsValid())
    {
        cString materialName = pEntry->ValueAsString();
        mpTextMaterial = CPUTAssetLibrary::GetAssetLibrary()->GetMaterial(materialName);
    }
    const cString FONT = _L("font");
    pEntry = pBlock->GetValueByName(FONT);
    if(pEntry->IsValid())
    {
        cString fontName;
        pEntry->ValueAsString(&fontName);
        mpFont = (CPUTFont*)CPUTAssetLibrary::GetAssetLibrary()->GetFontByName(fontName);
        if(mpFont == NULL)
        {
            DEBUG_PRINT(_L("Failed to load font: %s"), fontName.c_str());
        }
    }
    pEntry = pBlock->GetValueByName(TEXT);
    cString string;
    if(pEntry->IsValid())
    {
        pEntry->ValueAsString(&string);
        SetText(string);
    }   

    pEntry = pBlock->GetValueByName(HIGHLIGHT);
    if(pEntry->IsValid())
    {
        mHighlighted = pEntry->ValueAsBool();
    }   

    pEntry = pBlock->GetValueByName(MOUSE_CLICK);
    if(pEntry->IsValid())
    {
        pEntry->ValueAsString(&mClick.key);
        mEventHandler = true;
    }
    pEntry = pBlock->GetValueByName(MOUSE_UP);
    if(pEntry->IsValid())
    {
        pEntry->ValueAsString(&mUp.key);
        mEventHandler = true;
    }
    pEntry = pBlock->GetValueByName(MOUSE_DOWN);
    if(pEntry->IsValid())
    {
        pEntry->ValueAsString(&mDown.key);
        mEventHandler = true;
    }
    pEntry = pBlock->GetValueByName(MOUSE_OUT);
    if(pEntry->IsValid())
    {
        pEntry->ValueAsString(&mOut.key);
        mEventHandler = true;
    }
    pEntry = pBlock->GetValueByName(MOUSE_IN);
    if(pEntry->IsValid())
    {
        pEntry->ValueAsString(&mIn.key);
        mEventHandler = true;
    }
    pEntry = pBlock->GetValueByName(HOTKEY);
    if(pEntry->IsValid())
    {
        cString key;
        pEntry->ValueAsString(&key);
        mHotkey = MapKey(key);
        mEventHandler = true;
    }
    pEntry = pBlock->GetValueByName(HOTKEY_UP);
    if(pEntry->IsValid())
    {
        pEntry->ValueAsString(&mKeyUp.key);
        mEventHandler = true;
    }
    pEntry = pBlock->GetValueByName(HOTKEY_DOWN);
    if(pEntry->IsValid())
    {
        pEntry->ValueAsString(&mKeyDown.key);
        mEventHandler = true;
    }

    mParentMatrix = float4x4Translation((float)mPosX, (float)mPosY, 0.0);
    return true;
}