sergej.koptev Posted November 21, 2017 Posted November 21, 2017 Hello! I'm trying to implement some kind of text rendering (via alpha-texture + UV set for every character). So, first thing I need to implement - quad rendering (with some alpha-texture assigned). There is some code: m_texture_renderer = TextureRender::create(); m_texture_renderer->create2D( 1, 1 ); // because of. strange API m_engine_render_state = Unigine::RenderState::get(); m_engine_ffp = Unigine::Ffp::get(); if ( auto img = Image::create("textures/anticircle.png")) { m_anticircle_tex = Texture::create(); m_anticircle_tex->create(img); } /* ... some code missing. in render() call: */ m_texture_renderer->setColorTexture(0, m_viewport_info.tex_color ); m_texture_renderer->enable(); m_engine_ffp->enable( Ffp::MODE_DEFAULT ); m_engine_ffp->setOrtho( m_viewport_info.w, m_viewport_info.h ); const float v[] = { 0.f, float(x-rx), float(x+rx), float(m_viewport_info.w), 0.f, float(y-ry), float(y+ry), float(m_viewport_info.h) }; m_engine_render_state->clearStates(); //-- not sure - is it needed? m_engine_render_state->flushStates(); //-- draw anticircle sprite { const int old_src = m_engine_render_state->getBlendSrcFunc(); const int old_dest = m_engine_render_state->getBlendDestFunc(); m_engine_render_state->setBlendFunc( RenderState::BLEND_SRC_ALPHA, RenderState::BLEND_ONE_MINUS_SRC_ALPHA ); m_anticircle_tex->bindFragment(0); //m_anticircle_tex->render2D( x-rx, y-ry, x+rx, y+ry); // draw texture "as is", without color multiply m_engine_ffp->beginTriangles(); m_engine_ffp->addTriangleQuads(1); m_engine_ffp->addVertex ( v[1], v[5] ); m_engine_ffp->setTexCoord( 0.f, 0.f ); m_engine_ffp->setColor( col_argb ); m_engine_ffp->addVertex ( v[2], v[5] ); m_engine_ffp->setTexCoord( 1.f, 0.f ); m_engine_ffp->setColor( col_argb ); m_engine_ffp->addVertex ( v[2], v[6] ); m_engine_ffp->setTexCoord( 1.f, 1.f ); m_engine_ffp->setColor( col_argb ); m_engine_ffp->addVertex ( v[1], v[6] ); m_engine_ffp->setTexCoord( 0.f, 1.f ); m_engine_ffp->setColor( col_argb ); m_engine_ffp->endTriangles(); m_anticircle_tex->unbindFragment(0); m_engine_render_state->setBlendFunc( old_src, old_dest ); } m_engine_ffp->disable(); m_texture_renderer->disable(); This code works fine (draw colored quad with "anticircle" inside) - but only on OpenGL mode. On direct3D - I cannot find any way to draw something with alpha (line/quad/textured quad/etc). What should I fix to make it code portable from OpenGL to Direct3D? Thanks a lot!
silent Posted November 22, 2017 Posted November 22, 2017 Hi Sergej, Any simple working example (can be even based on a empty project)? We will try compile and debug that. Thanks! How to submit a good bug report --- FTP server for test scenes and user uploads: ftp://files.unigine.com user: upload password: 6xYkd6vLYWjpW6SN
Recommended Posts