CX_OBJECT_INIT(cxSprite, cxView) { this->texCoord = cxBoxTex2fDefault(); cxSpriteSetBlendFactor(this, GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); CX_EVENT_APPEND(this->cxView.onDirty, cxSpriteDirtyEvent); CX_METHOD_SET(this->cxView.Draw, cxSpriteDraw); cxSpriteSetShader(this, cxShaderDefaultKey); }
CX_OBJECT_INIT(cxSprite, cxView) { this->texCoord = cxBoxTex2fDefault(); cxSpriteSetBlendFactor(this, GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); CX_EVENT_QUICK(this->super.onDirty, cxSpriteDirtyEvent); CX_METHOD_OVERRIDE(this->super.Draw, cxSpriteDraw); cxSpriteSetShader(this, cxShaderDefaultKey); cxObjectSetReadAttrFunc(this, cxSpriteReadAttr); }
cxBoxTex2f cxRect4fToBoxTex2f(cxRect4f box,cxSize2f texsize) { cxBoxTex2f rv = cxBoxTex2fDefault(); cxFloat x = box.x / texsize.w; cxFloat y = box.y / texsize.h; cxFloat w = box.w / texsize.w; cxFloat h = box.h / texsize.h; rv.lb = cxTex2fv(x, y + h); rv.rb = cxTex2fv(x + w, y + h); rv.lt = cxTex2fv(x, y); rv.rt = cxTex2fv(x + w, y); return rv; }
CX_SETTER_DEF(cxAtlas, layers) { cxJson layers = cxJsonToArray(value); CX_JSON_ARRAY_EACH_BEG(layers, layer) { cxVec2f pos = cxVec2fv(0, 0); cxSize2f size = cxSize2fv(0, 0); cxBoxTex2f tex = cxBoxTex2fDefault(); cxColor4f color = cxColor4fv(1, 1, 1, 1); pos = cxJsonVec2f(layer, "pos", pos); size = cxJsonSize2f(layer, "size", size); cxConstChars key = cxJsonConstChars(layer, "key"); if(key != NULL){ tex = cxTextureBox(this->cxSprite.texture, key); }else{ tex = cxJsonBoxTex2f(layer, "coord", tex); } if(cxSize2Zero(size) && key != NULL){ size = cxTextureSize(this->cxSprite.texture, key); } color = cxJsonColor4f(layer, "color", color); cxAtlasAppendBoxPoint(this, pos, size, tex, color); }