deargui-vpl/ref/virtools/Samples/Behaviors/Shader/Sources/RTView.cpp

83 lines
2.4 KiB
C++

#include "stdafx.h"
#include "RTView.h"
#include "CKRasterizer.h"
//-----------------------------------------------------------------------------
void _PopCreateRenderTargetView(CKContext* context,
CKParameterOut* res, CKParameterIn* p1, CKParameterIn* p2)
{
CK_ID idtex = NULL;
p1->GetValue(&idtex);
VxRect rect;
p2->GetValue(&rect);
CKStructHelper ressh(res, FALSE);
ressh[0]->SetValue(&idtex);
ressh[1]->SetValue(&rect);
}
//-----------------------------------------------------------------------------
void _PopGetTexture(CKContext* context,
CKParameterOut* res, CKParameterIn* p1, CKParameterIn* p2)
{
RTView rtview;
memset(&rtview.rect, 0, sizeof(rtview.rect));
CKStructHelper p1sh(p1->GetRealSource(), FALSE);
rtview.tex = (CKTexture*)p1sh[0]->GetValueObject();
p1sh[1]->GetValue(&rtview.rect);
if (rtview.tex)
{
CK_ID id = rtview.tex->GetID();
res->SetValue(&id);
}
}
//-----------------------------------------------------------------------------
void _PopGetRectangle(CKContext* context,
CKParameterOut* res, CKParameterIn* p1, CKParameterIn* p2)
{
RTView rtview;
memset(&rtview.rect, 0, sizeof(rtview.rect));
CKStructHelper p1sh(p1->GetRealSource(), FALSE);
rtview.tex = (CKTexture*)p1sh[0]->GetValueObject();
p1sh[1]->GetValue(&rtview.rect);
res->SetValue(&rtview.rect);
}
//-----------------------------------------------------------------------------
void _PopGetTexelSize(CKContext* context,
CKParameterOut* res, CKParameterIn* p1, CKParameterIn* p2)
{
RTView rtview;
memset(&rtview.rect, 0, sizeof(rtview.rect));
CKStructHelper p1sh(p1->GetRealSource(), FALSE);
rtview.tex = (CKTexture*)p1sh[0]->GetValueObject();
p1sh[1]->GetValue(&rtview.rect);
Vx2DVector texsize = rtview.GetTexelSize();
res->SetValue(&texsize);
}
//-----------------------------------------------------------------------------
void _PopGetRectangleTexcoords(CKContext* context,
CKParameterOut* res, CKParameterIn* p1, CKParameterIn* p2)
{
RTView rtview;
memset(&rtview.rect, 0, sizeof(rtview.rect));
CKStructHelper p1sh(p1->GetRealSource(), FALSE);
rtview.tex = (CKTexture*)p1sh[0]->GetValueObject();
p1sh[1]->GetValue(&rtview.rect);
CKRST_RSTFAMILY driverFamily = context->GetPlayerRenderContext()->GetRasterizerContext()->m_Driver->m_2DCaps.Family;
VxRect rect = rtview.GetRectangleTexCoords(driverFamily == CKRST_DIRECTX ? 0.5f : 0.f);
res->SetValue(&rect);
}