Esempio n. 1
0
bool renderchain_create_first_pass(void *data, const LinkInfo *info, PixelFormat fmt)
{
   renderchain_t *chain = (renderchain_t*)data;
   D3DXMATRIX ident;
   D3DXMatrixIdentity(&ident);
   LPDIRECT3DDEVICE d3dr = (LPDIRECT3DDEVICE)chain->dev;
   d3dr->SetTransform(D3DTS_WORLD, &ident);
   d3dr->SetTransform(D3DTS_VIEW, &ident);

   Pass pass;
   pass.info = *info;
   pass.last_width = 0;
   pass.last_height = 0;

   chain->prev.ptr = 0;
   for (unsigned i = 0; i < TEXTURES; i++)
   {
      chain->prev.last_width[i] = 0;
      chain->prev.last_height[i] = 0;

      if (FAILED(d3dr->CreateVertexBuffer(
                  4 * sizeof(Vertex),
                  d3dr->GetSoftwareVertexProcessing() ? D3DUSAGE_SOFTWAREPROCESSING : 0,
                  0,
                  D3DPOOL_DEFAULT,
                  &chain->prev.vertex_buf[i],
                  NULL)))
      {
         return false;
      }

      if (FAILED(d3dr->CreateTexture(info->tex_w, info->tex_h, 1, 0,
                  fmt == RGB565 ? D3DFMT_R5G6B5 : D3DFMT_X8R8G8B8,
                  D3DPOOL_MANAGED,
                  &chain->prev.tex[i], NULL)))
      {
         return false;
      }

      d3dr->SetTexture(0, chain->prev.tex[i]);
      D3DDevice_SetSamplerState_MinFilter(d3dr, 0, translate_filter(info->pass->filter));
      D3DDevice_SetSamplerState_MagFilter(d3dr, 0, translate_filter(info->pass->filter));
      D3DDevice_SetSamplerState_AddressU(d3dr, 0, D3DTADDRESS_BORDER);
      D3DDevice_SetSamplerState_AddressV(d3dr, 0, D3DTADDRESS_BORDER);
      d3dr->SetTexture(0, NULL);
   }

   renderchain_compile_shaders(chain, pass.fPrg, pass.vPrg, info->pass->source.path);
   if (!renderchain_init_shader_fvf(chain, pass))
      return false;
   chain->passes.push_back(pass);
   return true;
}
Esempio n. 2
0
bool renderchain_add_pass(void *data, const LinkInfo *info)
{
   renderchain_t *chain = (renderchain_t*)data;
   LPDIRECT3DDEVICE d3dr = chain->dev;
   Pass pass;
   pass.info = *info;
   pass.last_width = 0;
   pass.last_height = 0;

   renderchain_compile_shaders(chain, pass.fPrg, pass.vPrg, info->pass->source.path);
   if (!renderchain_init_shader_fvf(chain, pass))
      return false;

   if (FAILED(D3DDevice_CreateVertexBuffers(d3dr, 4 * sizeof(Vertex),
               d3dr->GetSoftwareVertexProcessing() ? D3DUSAGE_SOFTWAREPROCESSING : 0,
               0,
               D3DPOOL_DEFAULT,
               &pass.vertex_buf,
               NULL)))
      return false;

   if (FAILED(d3dr->CreateTexture(info->tex_w, info->tex_h, 1,
               D3DUSAGE_RENDERTARGET,
               chain->passes.back().info.pass->fbo.fp_fbo ? D3DFMT_A32B32G32R32F : D3DFMT_A8R8G8B8,
               D3DPOOL_DEFAULT,
               &pass.tex, NULL)))
      return false;

   d3dr->SetTexture(0, pass.tex);
   D3DDevice_SetSamplerState_AddressU(d3dr, 0, D3DTADDRESS_BORDER);
   D3DDevice_SetSamplerState_AddressV(d3dr, 0, D3DTADDRESS_BORDER);
   d3dr->SetTexture(0, NULL);

   chain->passes.push_back(pass);

   renderchain_log_info(chain, info);
   return true;
}
Esempio n. 3
0
static bool renderchain_create_first_pass(void *data, const video_info_t *info)
{
   HRESULT ret;
   d3d_video_t *chain = (d3d_video_t*)data;
   LPDIRECT3DDEVICE d3dr = (LPDIRECT3DDEVICE)chain->dev;

   ret = d3dr->CreateVertexBuffer(4 * sizeof(DrawVerticeFormats), 
         D3DUSAGE_WRITEONLY, D3DFVF_CUSTOMVERTEX, D3DPOOL_MANAGED, &chain->vertex_buf
#ifdef _XBOX360
         ,NULL
#endif
         );

   if (FAILED(ret))
      return false;

   ret = d3dr->CreateTexture(chain->tex_w, chain->tex_h, 1, 0, info->rgb32 ? D3DFMT_LIN_X8R8G8B8 : D3DFMT_LIN_R5G6B5,
         0, &chain->tex
#ifdef _XBOX360
         , NULL
#endif
         );

   if (FAILED(ret))
      return false;

#ifdef _XBOX1
   d3dr->SetRenderState(D3DRS_LIGHTING, FALSE);
#endif
   d3dr->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE);
   d3dr->SetRenderState(D3DRS_ZENABLE, FALSE);

   if (!renderchain_init_shader_fvf(chain, chain))
      return false;

   return true;
}