HomePhabricator

evas gl: recover current program state.

Authored by Hermet on Nov 26 2018, 6:25 PM.

Description

evas gl: recover current program state.

Summary:
When we meets a new shader program in shape_context_push(),
it loads a shader binary, if it is necessary, create a new program for the shader.

In this step, the current program state could changed to this new one.
But still our gl context by shader_flush() could keep the previous program for next shader flush.

But it doens't know current program was changed by dropping by.

Here is a simple scenario:

  1. evas_gl_common_context_image_push():

This image requires Program A. it calls evas_gl_common_context_push() internally.
then shader_array_flush() instantly.
It stores the current context including shader program(Program A)

  1. evas_gl_common_context_xxx_push():

call evas_gl_common_shader_program_get().
xxx draws first time, it loads a new shader program.
Now this changed the current program to a new instant one.

...

  1. shader_array_flush():

draw image which requires Prorgam A (No.1).
Unfortunately, stored context is same to this.
So, it skips some gl context setting including shader program.

@fix

Reviewers: committers

Subscribers: cedric, reviewers, committers

Tags: efl

Differential Revision: https://phab.enlightenment.org/D7309

Details

Committed
HermetNov 26 2018, 6:25 PM
Differential Revision
D7309: evas gl: recover current program state.
Parents
rEFLc9d20d488b7c: Revert "evas map: calc map geometry when it is out of screen"
Branches
Unknown
Tags
Unknown