打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
关于着色器:OpenGL 4.6中没有适用于我的Alpha混合 | 码农家园
userphoto

2023.01.09 湖北

关注
// init stuff
glEnable(GL_POINT_SPRITE);
initbasicShaders(); // vertex, fragment
initTexture();
...

void application::initTexture()
{
    m_ParticleTex = Texture(); // empty constructor
    m_ParticleTex.loadTexture(TEXTURE_PATH);

    GLint baseImageLoc = glGetUniformLocation(m_RenderProgramHandle,"u_Texture");
    glUseProgram(m_RenderProgramHandle);
    glUniform1i(baseImageLoc, 0);
    glActiveTexture(GL_TEXTURE0 + 0);
    glBindTexture(GL_TEXTURE_2D, m_ParticleTex.getTextureID());
}

// using the library stb_image
void Texture::loadTexture(const char* fileName)
{
    int channels, width, height;
    unsigned char * localBuffer;
    m_FilePath = fileName;

    localBuffer = stbi_load(fileName, &width, &height, &channels, 4);

    glGenTextures(1, &m_TextureID);
    glBindTexture(GL_TEXTURE_2D, m_TextureID);

    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);

    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, localBuffer);
    glBindTexture(GL_TEXTURE_2D, 0);

    if (localBuffer) {
        stbi_image_free(localBuffer);
    }
}

...
...
...
// Now - the render loop:
void application::runOpenGLBuffer()
{
    Log::logInfoRun(m_Name,"OpenGL buffer");
    glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
    glEnable(GL_BLEND);
    glEnable(GL_POINT_SMOOTH);
    glDisable(GL_DEPTH_TEST);
    glEnable(GL_ALPHA_TEST);

    glPointSize(PARTICLE_SIZE);
    glHint(GL_POINT_SMOOTH_HINT, GL_NICEST);

        glUseProgram(m_RenderProgramHandle);
    this->updateTextures();
        glDrawArrays(GL_POINTS, 0, NUM_PARTICLES);
}


...
// and the fragment shader
#version 460
#extension GL_ARB_separate_shader_objects : enable

layout(std430, binding = 3) buffer density_block
{
    float density[];
};

void main()
{
// densitColor is just a variable color from density
    vec4 particleColor = vec4(texture(u_Texture, gl_PointCoord) * densityColor);
    color = particleColor;
}
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
OpenGL阴影,Shadow Mapping(附源程序)
反走样和OpenGL多重采样
深入了解OpenGL
opengl渲染管线 不能再详细了
《基于MFC的OpenGL编程》Part 10 Texture Mapping
OpenGL的帧缓冲对象和浮点纹理(转载自Graphixer何咏的博客)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服