OpenGL混合不适用于DIB部分

时间:2017-03-05 02:16:11

标签: c++ opengl

我正在尝试使用XP上的OpenGL进行混合渲染到DIB部分。我正在尝试将源和目标颜色组件相乘,如:

public abstract class BaseDatabaseConfig {

    protected Map<String, Object> jpaPropertiesMap() {
        HashMap<String, Object> properties = new HashMap<>();
        properties.put("hibernate.transaction.jta.platform","com.atomikos.icatch.jta.hibernate4.AtomikosPlatform");
        properties.put("javax.persistence.transactionType","JTA");
        properties.put("hibernate.search.autoregister_listeners","false");
        properties.put("hibernate.connection.handling_mode","DELAYED_ACQUISITION_AND_RELEASE_AFTER_TRANSACTION");
        properties.put("hibernate.connection.release_mode","on_close");
        properties.put("hibernate.cache.use_second_level_cache","false");
        return properties;
    }

    protected JpaVendorAdapter db2JpaVendorAdapter() {
        HibernateJpaVendorAdapter hibernateJpaVendorAdapter = new HibernateJpaVendorAdapter();
        hibernateJpaVendorAdapter.setDatabase(Database.INFORMIX);
        hibernateJpaVendorAdapter.setShowSql(false);
        hibernateJpaVendorAdapter.setGenerateDdl(false);
        return hibernateJpaVendorAdapter;
    }

    protected JpaVendorAdapter db1JpaVendorAdapter() {
        HibernateJpaVendorAdapter hibernateJpaVendorAdapter = new HibernateJpaVendorAdapter();
        hibernateJpaVendorAdapter.setDatabasePlatform("org.hibernate.dialect.Oracle10gDialect");
        hibernateJpaVendorAdapter.setShowSql(false);
        hibernateJpaVendorAdapter.setGenerateDdl(false);
        return hibernateJpaVendorAdapter;
    }

然而,它无法绘制混合图像。通过改变我要求的混合类型,我可以将它画成好像没有混合,或者根本不画画。但它拒绝融合。

以下是我正在使用的OpenGL版本的详细信息:

glEnable(GL_BLEND);
glBlendFunc(GL_DST_COLOR, GL_ZERO);

我知道我只能使用DIB部分进行“通用”(软件)渲染,但我没想到混合会失败。我已经搜索了关于在这种情况下是否支持混合的确认,但无济于事。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

glBlendFunc(GL_DST_COLOR, GL_ZERO);
               ^^^ oh?

Transparency, Translucency, and Blending

  

15.060 我想使用混合但无法使目标alpha工作。我可以混合或创建没有目标alpha的透明效果吗?

     

许多OpenGL设备不支持目标alpha。 特别是,Microsoft的OpenGL 1.1软件渲染库不支持它。 OpenGL规范并不需要它。

此外:

No Alpha in the Framebuffer

  

如果您正在进行混合并且需要目标alpha,则需要确保渲染目标有一个。渲染到Framebuffer对象时,这很容易确保。但是使用Default Framebuffer,它取决于您如何创建OpenGL上下文。

     

例如,如果您使用的是GLUT,则需要确保将GLUT_ALPHA传递给glutInitDisplayMode函数。

答案 1 :(得分:0)

好吧我犯了一个愚蠢的错误:我误读了我自己的脚本代码并最终在错误的渲染过程中应用了纹理。 OpenGL不应该受到责备,并且混合了DOES。