Jump to content
Sign in to follow this  
loki5100

How to draw a YUV texture with delphi?

Recommended Posts

As far as I Know, YUV texture is a composition of 2 textures (the Y and the UV). Those 2 textures must be drawn on the canvas using a shader like this one :

#version 100
    precision mediump float;

    varying vec2 vUV;
    uniform sampler2D SamplerY;
    uniform sampler2D SamplerUV;

    void main() {

        mediump vec3 yuv;
        lowp vec3 rgb;

        yuv.x = texture2D(SamplerY, vUV).r;
        yuv.yz = texture2D(SamplerUV, vUV).rg - vec2(0.5, 0.5);

        // Using BT.709 which is the standard for HDTV
        rgb = mat3(      1,       1,      1,
                         0, -.18732, 1.8556,
                   1.57481, -.46813,      0) * yuv;

        gl_FragColor = vec4(rgb, 1);
    } 

I know how to use a shader with one texture (for example overridden TFilterBaseFilter), however, I don't know how I can use a shader with 2 textures in parameters (finality is to draw my YUV texture on a canvas)

Share this post


Link to post

Thanks, Dalija, however, I m not sure I can use this to draw my YUV frame to a Canvas 😞 

 

In Delphi, we have this, but I didn't find a way to make it work 😞

procedure TCustomContextOpenGL.DoSetShaderVariable(const Name: string; const Texture: TTexture);
var
  Variable: TContextShaderVariable;
begin
  if Valid then
  begin
    if FCurrentProgram <> nil then
    begin
      if FCurrentProgram.Variables.TryGetValue(Name, Variable) then
      begin
        glActiveTexture(GL_TEXTURE0 + Variable.TextureUnit);

        if Texture = nil then
          glBindTexture(GL_TEXTURE_2D, 0)
        else
          glBindTexture(GL_TEXTURE_2D, Texture.Handle);

        glUniform1i(Variable.Index, Variable.TextureUnit);
        glActiveTexture(GL_TEXTURE0);
      end;
    end;
    if GLHasAnyErrors then
      RaiseContextExceptionFmt(@SCannotFindShaderVariable, [Name]);
  end;
end;

Share this post


Link to post

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×