[DEV] shader loading corection and touch scrooling corection

This commit is contained in:
Edouard DUPIN 2013-07-25 22:04:02 +02:00
parent d535450eb5
commit 6ea4035942
11 changed files with 79 additions and 56 deletions

View File

@ -2,7 +2,6 @@
precision mediump float; precision mediump float;
precision mediump int; precision mediump int;
#endif #endif
struct displayProperty { struct displayProperty {
vec2 size; vec2 size;
vec2 origin; vec2 origin;
@ -10,31 +9,21 @@ struct displayProperty {
vec2 insideSize; vec2 insideSize;
}; };
struct widgetStateProperty {
int stateOld;
int stateNew;
float transition;
};
uniform displayProperty EW_widgetProperty; uniform displayProperty EW_widgetProperty;
uniform widgetStateProperty EW_status;
// transmit from the vertex shader // transmit from the vertex shader
varying vec2 v_position; // interpolated position ... varying vec2 v_position; // interpolated position ...
varying vec4 v_colorTansition;
// internal static define // internal static define
vec4 S_colorBg = vec4(0.0); vec4 S_colorBg = vec4(0.0);
vec4 S_colorFg[3];
vec4 S_colorBorder = vec4(0.0,0.0,0.0,1.0); vec4 S_colorBorder = vec4(0.0,0.0,0.0,1.0);
float S_sizePadding = 3.0; float S_sizePadding = 3.0;
float S_sizeBorder = 1.0; float S_sizeBorder = 1.0;
void main(void) { void main(void) {
S_colorFg[0] = vec4(1.0,1.0,1.0,0.8);
S_colorFg[1] = vec4(1.0,1.0,1.0,0.4);
S_colorFg[2] = vec4(0.0,0.0,1.0,0.1);
// prevent origin moving ... // prevent origin moving ...
vec2 position = v_position - EW_widgetProperty.origin; vec2 position = v_position - EW_widgetProperty.origin;
@ -56,8 +45,7 @@ void main(void) {
gl_FragColor = S_colorBorder; gl_FragColor = S_colorBorder;
} else { } else {
// note : int() is needed for the OpenGL ES platform // note : int() is needed for the OpenGL ES platform
gl_FragColor = S_colorFg[int(EW_status.stateOld)]*(1.0-EW_status.transition) gl_FragColor = v_colorTansition;
+ S_colorFg[int(EW_status.stateNew)]*EW_status.transition;
} }
} else { } else {
gl_FragColor = S_colorBg; gl_FragColor = S_colorBg;

View File

@ -3,15 +3,48 @@ precision mediump float;
precision mediump int; precision mediump int;
#endif #endif
struct widgetStateProperty {
int stateOld;
int stateNew;
float transition;
};
// Input : // Input :
attribute vec2 EW_coord2d; attribute vec2 EW_coord2d;
uniform mat4 EW_MatrixTransformation; uniform mat4 EW_MatrixTransformation;
uniform widgetStateProperty EW_status;
// output : // output :
varying vec2 v_position; // This will be passed into the fragment shader. varying vec2 v_position; // This will be passed into the fragment shader.
varying vec4 v_colorTansition;
// internal :
vec4 S_colorFg[3];
void main(void) { void main(void) {
S_colorFg[0] = vec4(1.0,1.0,1.0,0.8);
S_colorFg[1] = vec4(1.0,1.0,1.0,0.4);
S_colorFg[2] = vec4(0.0,0.0,1.0,0.1);
gl_Position = EW_MatrixTransformation * vec4(EW_coord2d, 0.0, 1.0); gl_Position = EW_MatrixTransformation * vec4(EW_coord2d, 0.0, 1.0);
// transmit position of the curent element (intermolated ...) // transmit position of the curent element (intermolated ...)
v_position = EW_coord2d; v_position = EW_coord2d;
vec4 colorOld = S_colorFg[0];
if(EW_status.stateOld==1) {
colorOld = S_colorFg[1];
} else if(EW_status.stateOld==2) {
colorOld = S_colorFg[2];
}
vec4 colorNew = S_colorFg[0];
if(EW_status.stateNew==1) {
colorNew = S_colorFg[1];
} else if(EW_status.stateNew==2) {
colorNew = S_colorFg[2];
}
// note : int() is needed for the OpenGL ES platform
v_colorTansition = colorOld*(1.0-EW_status.transition)
+ colorNew*EW_status.transition;
} }

2
external/etk vendored

@ -1 +1 @@
Subproject commit f2edd2def61f19ec5db846a522fb056a9c7cee0c Subproject commit b9a79c1dfceb04fc2e488832260a26c03055bd98

View File

@ -304,7 +304,7 @@ static int32_t nextP2(int32_t value)
bool ewol::resource::Keep(const etk::UString& _filename, ewol::TextureFile*& _object, ivec2 _size) bool ewol::resource::Keep(const etk::UString& _filename, ewol::TextureFile*& _object, ivec2 _size)
{ {
EWOL_VERBOSE(" keep image file : " << _filename << " " << _size); EWOL_INFO("KEEP : TextureFile : file : " << _filename << " basic size=" << _size);
if (_size.x()==0) { if (_size.x()==0) {
_size.setX(-1); _size.setX(-1);
//EWOL_ERROR("Error Request the image size.x() =0 ???"); //EWOL_ERROR("Error Request the image size.x() =0 ???");
@ -324,20 +324,15 @@ bool ewol::resource::Keep(const etk::UString& _filename, ewol::TextureFile*& _ob
if (_size.x()>0 && _size.y()>0) { if (_size.x()>0 && _size.y()>0) {
EWOL_VERBOSE(" ==> specific size : " << _size); EWOL_VERBOSE(" ==> specific size : " << _size);
#ifdef __TARGET_OS__Android #ifdef __TARGET_OS__Android
ivec2 size2(nextP2(_size.x()), nextP2(_size.y())); _size.setValue(nextP2(_size.x()), nextP2(_size.y()));
TmpFilename += ":"; #endif
TmpFilename += size2.x();
TmpFilename += "x";
TmpFilename += size2.y();
#else
TmpFilename += ":"; TmpFilename += ":";
TmpFilename += _size.x(); TmpFilename += _size.x();
TmpFilename += "x"; TmpFilename += "x";
TmpFilename += _size.y(); TmpFilename += _size.y();
#endif
} }
EWOL_INFO("KEEP : TextureFile : file : \"" << TmpFilename << "\" basic size=" << _size); EWOL_INFO("KEEP : TextureFile : file : \"" << TmpFilename << "\" new size=" << _size);
_object = static_cast<ewol::TextureFile*>(LocalKeep(TmpFilename)); _object = static_cast<ewol::TextureFile*>(LocalKeep(TmpFilename));
if (NULL != _object) { if (NULL != _object) {
return true; return true;

View File

@ -196,14 +196,14 @@ ewol::eSystemInput::~eSystemInput(void)
} }
int32_t ewol::eSystemInput::localGetDestinationId(ewol::keyEvent::type_te type, ewol::Widget* destWidget, int32_t realInputId) int32_t ewol::eSystemInput::localGetDestinationId(ewol::keyEvent::type_te _type, ewol::Widget* _destWidget, int32_t _realInputId)
{ {
if (type == ewol::keyEvent::typeFinger) { if (_type == ewol::keyEvent::typeFinger) {
int32_t lastMinimum = 0; int32_t lastMinimum = 0;
for(int32_t iii=0; iii<MAX_MANAGE_INPUT; iii++) { for(int32_t iii=0; iii<MAX_MANAGE_INPUT; iii++) {
if (true==m_eventInputSaved[iii].isUsed) { if (true==m_eventInputSaved[iii].isUsed) {
if (m_eventInputSaved[iii].curentWidgetEvent == destWidget) { if (m_eventInputSaved[iii].curentWidgetEvent == _destWidget) {
if (iii != realInputId) { if (iii != _realInputId) {
lastMinimum = etk_max(lastMinimum, m_eventInputSaved[iii].destinationInputId); lastMinimum = etk_max(lastMinimum, m_eventInputSaved[iii].destinationInputId);
} }
} }
@ -211,12 +211,13 @@ int32_t ewol::eSystemInput::localGetDestinationId(ewol::keyEvent::type_te type,
} }
return lastMinimum+1; return lastMinimum+1;
} }
return realInputId; return _realInputId;
} }
// note if id<0 ==> the it was finger event ... // note if id<0 ==> the it was finger event ...
void ewol::eSystemInput::Motion(ewol::keyEvent::type_te type, int pointerID, vec2 pos) void ewol::eSystemInput::Motion(ewol::keyEvent::type_te type, int pointerID, vec2 pos)
{ {
EVENT_DEBUG("motion event : " << type << " " << pointerID << " " << pos);
if (MAX_MANAGE_INPUT<=pointerID) { if (MAX_MANAGE_INPUT<=pointerID) {
// reject pointer ==> out of IDs... // reject pointer ==> out of IDs...
return; return;

View File

@ -41,14 +41,14 @@ ewol::Program::Program(const etk::UString& filename) :
EWOL_CRITICAL("Error while getting a specific shader filename : " << tmpFilename); EWOL_CRITICAL("Error while getting a specific shader filename : " << tmpFilename);
return; return;
} else { } else {
EWOL_DEBUG("Add shader on program : "<< tmpFilename); EWOL_DEBUG("Add shader on program : "<< tmpFilename << "vert");
m_shaderList.PushBack(tmpShader); m_shaderList.PushBack(tmpShader);
} }
if (false == ewol::resource::Keep(tmpFilename+"frag", tmpShader)) { if (false == ewol::resource::Keep(tmpFilename+"frag", tmpShader)) {
EWOL_CRITICAL("Error while getting a specific shader filename : " << tmpFilename); EWOL_CRITICAL("Error while getting a specific shader filename : " << tmpFilename);
return; return;
} else { } else {
EWOL_DEBUG("Add shader on program : "<< tmpFilename); EWOL_DEBUG("Add shader on program : "<< tmpFilename << "frag");
m_shaderList.PushBack(tmpShader); m_shaderList.PushBack(tmpShader);
} }
} else { } else {

View File

@ -15,15 +15,15 @@
#undef __class__ #undef __class__
#define __class__ "Shader" #define __class__ "Shader"
ewol::Shader::Shader(const etk::UString& filename): ewol::Shader::Shader(const etk::UString& _filename):
ewol::Resource(filename), ewol::Resource(_filename),
m_exist(false), m_exist(false),
m_fileData(NULL), m_fileData(NULL),
m_shader(0), m_shader(0),
m_type(0) m_type(0)
{ {
m_resourceLevel = 0; m_resourceLevel = 0;
EWOL_DEBUG("OGL : load SHADER \"" << filename << "\""); EWOL_DEBUG("OGL : load SHADER \"" << _filename << "\"");
// load data from file "all the time ..." // load data from file "all the time ..."
if (true == m_name.EndWith(".frag") ) { if (true == m_name.EndWith(".frag") ) {
@ -89,7 +89,12 @@ void ewol::Shader::UpdateContext(void)
if (m_type == GL_VERTEX_SHADER){ if (m_type == GL_VERTEX_SHADER){
tmpShaderType = "GL_VERTEX_SHADER"; tmpShaderType = "GL_VERTEX_SHADER";
} }
EWOL_ERROR("Could not compile \"" << tmpShaderType << "\": " << l_bufferDisplayError); EWOL_ERROR("Could not compile \"" << tmpShaderType << "\" name='" << m_name << "'");
EWOL_ERROR("Error " << l_bufferDisplayError);
etk::Vector<etk::UString> lines = etk::UString(m_fileData).Split('\n');
for (esize_t iii=0 ; iii<lines.Size() ; iii++) {
EWOL_ERROR("file " << (iii+1) << "|" << lines[iii]);
}
return; return;
} }
} }

View File

@ -31,7 +31,7 @@ namespace ewol
* @brief Contructor of an opengl Shader * @brief Contructor of an opengl Shader
* @param[in] filename Standard file name format. see @ref etk::FSNode * @param[in] filename Standard file name format. see @ref etk::FSNode
*/ */
Shader(const etk::UString& filename); Shader(const etk::UString& _filename);
/** /**
* @brief Destructor, remove the current Shader * @brief Destructor, remove the current Shader
*/ */

View File

@ -79,16 +79,16 @@ void widget::List::CalculateMinMaxSize(void)
} }
void widget::List::AddOObject(ewol::Compositing* newObject, int32_t pos) void widget::List::AddOObject(ewol::Compositing* _newObject, int32_t _pos)
{ {
if (NULL == newObject) { if (NULL == _newObject) {
EWOL_ERROR("Try to add an empty object in the Widget generic display system"); EWOL_ERROR("Try to add an empty object in the Widget generic display system");
return; return;
} }
if (pos < 0 || pos >= m_listOObject.Size() ) { if (_pos < 0 || _pos >= m_listOObject.Size() ) {
m_listOObject.PushBack(newObject); m_listOObject.PushBack(_newObject);
} else { } else {
m_listOObject.Insert(pos, newObject); m_listOObject.Insert(_pos, _newObject);
} }
} }

View File

@ -16,7 +16,7 @@
#include <ewol/compositing/Compositing.h> #include <ewol/compositing/Compositing.h>
namespace widget { namespace widget {
class List :public widget::WidgetScrooled class List : public widget::WidgetScrooled
{ {
public: public:
List(void); List(void);
@ -24,13 +24,13 @@ namespace widget {
virtual const char * const GetObjectType(void) { return "ewol::List"; }; virtual const char * const GetObjectType(void) { return "ewol::List"; };
virtual ~List(void); virtual ~List(void);
virtual void CalculateMinMaxSize(void); virtual void CalculateMinMaxSize(void);
void SetLabel(etk::UString newLabel); void SetLabel(etk::UString _newLabel);
// Drawing capabilities .... // Drawing capabilities ....
private: private:
etk::Vector<ewol::Compositing*> m_listOObject; //!< generic element to display... etk::Vector<ewol::Compositing*> m_listOObject; //!< generic element to display...
etk::Vector<ivec2 > m_lineSize; etk::Vector<ivec2 > m_lineSize;
public: public:
void AddOObject(ewol::Compositing* newObject, int32_t pos=-1); void AddOObject(ewol::Compositing* _newObject, int32_t _pos=-1);
void ClearOObjectList(void); void ClearOObjectList(void);
// list properties ... // list properties ...
private: private:

View File

@ -80,6 +80,7 @@ void widget::WidgetScrooled::OnRegenerateDisplay(void)
bool widget::WidgetScrooled::OnEventInput(const ewol::EventInput& _event) bool widget::WidgetScrooled::OnEventInput(const ewol::EventInput& _event)
{ {
EWOL_VERBOSE("event XXX " << _event);
vec2 relativePos = RelativePosition(_event.GetPos()); vec2 relativePos = RelativePosition(_event.GetPos());
// corection due to the open Gl invertion ... // corection due to the open Gl invertion ...
relativePos.setY(m_size.y() - relativePos.y()); relativePos.setY(m_size.y() - relativePos.y());
@ -232,17 +233,17 @@ bool widget::WidgetScrooled::OnEventInput(const ewol::EventInput& _event)
&& ( ewol::keyEvent::typeUnknow==m_highSpeedType && ( ewol::keyEvent::typeUnknow==m_highSpeedType
|| ewol::keyEvent::typeFinger==m_highSpeedType ) ) { || ewol::keyEvent::typeFinger==m_highSpeedType ) ) {
if (1 == _event.GetId()) { if (1 == _event.GetId()) {
//EWOL_VERBOSE("event 1 << " << (int32_t)typeEvent << "(" << x << "," << y << ")"); EWOL_VERBOSE("event 1 " << _event);
if (ewol::keyEvent::statusDown == _event.GetStatus()) { if (ewol::keyEvent::statusDown == _event.GetStatus()) {
m_highSpeedMode = widget::SCROLL_INIT; m_highSpeedMode = widget::SCROLL_INIT;
m_highSpeedType = ewol::keyEvent::typeFinger; m_highSpeedType = ewol::keyEvent::typeFinger;
m_highSpeedStartPos.setValue(relativePos.x(), relativePos.y()); m_highSpeedStartPos.setValue(relativePos.x(), relativePos.y());
EWOL_VERBOSE("SCROOL ==> INIT"); EWOL_DEBUG("SCROOL ==> INIT");
return true; return true;
} else if (ewol::keyEvent::statusUp == _event.GetStatus()) { } else if (ewol::keyEvent::statusUp == _event.GetStatus()) {
m_highSpeedMode = widget::SCROLL_DISABLE; m_highSpeedMode = widget::SCROLL_DISABLE;
m_highSpeedType = ewol::keyEvent::typeUnknow; m_highSpeedType = ewol::keyEvent::typeUnknow;
EWOL_VERBOSE("SCROOL ==> DISABLE"); EWOL_DEBUG("SCROOL ==> DISABLE");
MarkToRedraw(); MarkToRedraw();
return true; return true;
} else if (widget::SCROLL_INIT==m_highSpeedMode && ewol::keyEvent::statusMove == _event.GetStatus()) { } else if (widget::SCROLL_INIT==m_highSpeedMode && ewol::keyEvent::statusMove == _event.GetStatus()) {
@ -252,25 +253,25 @@ bool widget::WidgetScrooled::OnEventInput(const ewol::EventInput& _event)
// the scrooling can start : // the scrooling can start :
// select the direction : // select the direction :
m_highSpeedMode = widget::SCROLL_ENABLE_FINGER; m_highSpeedMode = widget::SCROLL_ENABLE_FINGER;
EWOL_VERBOSE("SCROOL ==> ENABLE"); EWOL_DEBUG("SCROOL ==> ENABLE");
MarkToRedraw(); MarkToRedraw();
} }
return true; return true;
} if (widget::SCROLL_ENABLE_FINGER==m_highSpeedMode && ewol::keyEvent::statusMove == _event.GetStatus()) { } if (widget::SCROLL_ENABLE_FINGER==m_highSpeedMode && ewol::keyEvent::statusMove == _event.GetStatus()) {
//m_originScrooled.x = (int32_t)(m_maxSize.x * x / m_size.x); //m_originScrooled.x = (int32_t)(m_maxSize.x * x / m_size.x);
m_originScrooled.setX(m_originScrooled.x() - relativePos.x() - m_highSpeedStartPos.x()); m_originScrooled.setX(m_originScrooled.x() - (relativePos.x() - m_highSpeedStartPos.x()));
m_originScrooled.setY(m_originScrooled.y() - relativePos.y() - m_highSpeedStartPos.y()); m_originScrooled.setY(m_originScrooled.y() - (relativePos.y() - m_highSpeedStartPos.y()));
m_originScrooled.setX(etk_avg(0, m_originScrooled.x(), (m_maxSize.x() - m_size.x()*m_limitScrolling))); m_originScrooled.setX(etk_avg(0, m_originScrooled.x(), (m_maxSize.x() - m_size.x()*m_limitScrolling)));
m_originScrooled.setY(etk_avg(0, m_originScrooled.y(), (m_maxSize.y() - m_size.y()*m_limitScrolling))); m_originScrooled.setY(etk_avg(0, m_originScrooled.y(), (m_maxSize.y() - m_size.y()*m_limitScrolling)));
m_highSpeedStartPos.setValue(relativePos.x(), relativePos.y()); m_highSpeedStartPos.setValue(relativePos.x(), relativePos.y());
EWOL_VERBOSE("SCROOL ==> MOVE (" << m_originScrooled.x() << "," << m_originScrooled.y() << ")"); EWOL_DEBUG("SCROOL ==> MOVE m_originScrooled=" << m_originScrooled << " " << relativePos << " " << m_highSpeedStartPos);
MarkToRedraw(); MarkToRedraw();
return true; return true;
} }
} else if (widget::SCROLL_DISABLE!=m_highSpeedMode && ewol::keyEvent::statusLeave == _event.GetStatus()) { } else if (widget::SCROLL_DISABLE!=m_highSpeedMode && ewol::keyEvent::statusLeave == _event.GetStatus()) {
m_highSpeedMode = widget::SCROLL_DISABLE; m_highSpeedMode = widget::SCROLL_DISABLE;
m_highSpeedType = ewol::keyEvent::typeUnknow; m_highSpeedType = ewol::keyEvent::typeUnknow;
EWOL_VERBOSE("SCROOL ==> DISABLE"); EWOL_DEBUG("SCROOL ==> DISABLE");
MarkToRedraw(); MarkToRedraw();
return true; return true;
} }