static int layout_lua_delete(lua_State *L) { GtLayout **layout; layout = check_layout(L, 1); gt_layout_delete(*layout); return 0; }
// ### allocate-standard-instance layout => instance Value SYS_allocate_standard_instance(Value arg) { Layout * layout = check_layout(arg); unsigned long numslots = layout->numslots(); StandardObject * instance = new StandardObject(WIDETAG_STANDARD_OBJECT, layout, numslots); return make_value(instance); }
int GrDrawTarget::VertexSizeAndOffsetsByStage(GrVertexLayout vertexLayout, int texCoordOffsetsByStage[kNumStages], int* colorOffset, int* coverageOffset, int* edgeOffset) { GrAssert(check_layout(vertexLayout)); int texCoordOffsetsByIdx[kMaxTexCoords]; int size = VertexSizeAndOffsetsByIdx(vertexLayout, (NULL == texCoordOffsetsByStage) ? NULL : texCoordOffsetsByIdx, colorOffset, coverageOffset, edgeOffset); if (NULL != texCoordOffsetsByStage) { for (int s = 0; s < kNumStages; ++s) { int tcIdx; if (StagePosAsTexCoordVertexLayoutBit(s) & vertexLayout) { texCoordOffsetsByStage[s] = 0; } else if ((tcIdx = VertexTexCoordsForStage(s, vertexLayout)) >= 0) { texCoordOffsetsByStage[s] = texCoordOffsetsByIdx[tcIdx]; } else { texCoordOffsetsByStage[s] = -1; } } } return size; }
int GrDrawTarget::VertexSizeAndOffsetsByStage( GrVertexLayout vertexLayout, int texCoordOffsetsByStage[GrDrawState::kNumStages], int* colorOffset, int* coverageOffset, int* edgeOffset) { GrAssert(check_layout(vertexLayout)); int texCoordOffsetsByIdx[GrDrawState::kMaxTexCoords]; int size = VertexSizeAndOffsetsByIdx(vertexLayout, (NULL == texCoordOffsetsByStage) ? NULL : texCoordOffsetsByIdx, colorOffset, coverageOffset, edgeOffset); if (NULL != texCoordOffsetsByStage) { for (int s = 0; s < GrDrawState::kNumStages; ++s) { int tcIdx = VertexTexCoordsForStage(s, vertexLayout); texCoordOffsetsByStage[s] = tcIdx < 0 ? 0 : texCoordOffsetsByIdx[tcIdx]; } } return size; }
// ### allocate-funcallable-standard-instance layout => instance Value SYS_allocate_funcallable_standard_instance(Value arg) { Layout * layout = check_layout(arg); // unsigned long numslots = layout->numslots(); FuncallableStandardObject * instance = new FuncallableStandardObject(layout); return make_value(instance); }
int GrDrawTarget::VertexSizeAndOffsetsByIdx( GrVertexLayout vertexLayout, int texCoordOffsetsByIdx[GrDrawState::kMaxTexCoords], int* colorOffset, int* coverageOffset, int* edgeOffset) { GrAssert(check_layout(vertexLayout)); int vecSize = (vertexLayout & kTextFormat_VertexLayoutBit) ? sizeof(GrGpuTextVertex) : sizeof(GrPoint); int size = vecSize; // position for (int t = 0; t < GrDrawState::kMaxTexCoords; ++t) { if (gTexCoordMasks[t] & vertexLayout) { if (NULL != texCoordOffsetsByIdx) { texCoordOffsetsByIdx[t] = size; } size += vecSize; } else { if (NULL != texCoordOffsetsByIdx) { texCoordOffsetsByIdx[t] = -1; } } } if (kColor_VertexLayoutBit & vertexLayout) { if (NULL != colorOffset) { *colorOffset = size; } size += sizeof(GrColor); } else { if (NULL != colorOffset) { *colorOffset = -1; } } if (kCoverage_VertexLayoutBit & vertexLayout) { if (NULL != coverageOffset) { *coverageOffset = size; } size += sizeof(GrColor); } else { if (NULL != coverageOffset) { *coverageOffset = -1; } } if (kEdge_VertexLayoutBit & vertexLayout) { if (NULL != edgeOffset) { *edgeOffset = size; } size += 4 * sizeof(SkScalar); } else { if (NULL != edgeOffset) { *edgeOffset = -1; } } return size; }
int GrDrawTarget::VertexColorOffset(GrVertexLayout vertexLayout) { GrAssert(check_layout(vertexLayout)); if (vertexLayout & kColor_VertexLayoutBit) { int vecSize = (vertexLayout & kTextFormat_VertexLayoutBit) ? sizeof(GrGpuTextVertex) : sizeof(GrPoint); return vecSize * (num_tex_coords(vertexLayout) + 1); //+1 for pos } return -1; }
int GrDrawTarget::VertexTexCoordsForStage(int stage, GrVertexLayout vertexLayout) { GrAssert(stage < kNumStages); GrAssert(check_layout(vertexLayout)); int bit = vertexLayout & stage_tex_coord_mask(stage); if (bit) { // figure out which set of texture coordates is used // bits are ordered T0S0, T0S1, T0S2, ..., T1S0, T1S1, ... // and start at bit 0. GR_STATIC_ASSERT(sizeof(GrVertexLayout) <= sizeof(uint32_t)); return (32 - Gr_clz(bit) - 1) / kNumStages; } return -1; }
int GrDrawTarget::VertexTexCoordsForStage(int stageIdx, GrVertexLayout vertexLayout) { GrAssert(stageIdx < GrDrawState::kNumStages); GrAssert(check_layout(vertexLayout)); int bit = vertexLayout & gStageTexCoordMasks[stageIdx]; if (bit) { // figure out which set of texture coordates is used // bits are ordered T0S0, T0S1, T0S2, ..., T1S0, T1S1, ... // and start at bit 0. GR_STATIC_ASSERT(sizeof(GrVertexLayout) <= sizeof(uint32_t)); return (32 - SkCLZ(bit) - 1) / GrDrawState::kNumStages; } return -1; }
static int layout_lua_sketch(lua_State *L) { GtLayout **layout; GtCanvas **canvas; GtError *err; int had_err = 0; layout = check_layout(L, 1); canvas = check_canvas(L, 2); err = gt_error_new(); had_err = gt_layout_sketch(*layout, *canvas, err); if (had_err < 0) return gt_lua_error(L, err); gt_error_delete(err); return 0; }
static int layout_lua_get_height(lua_State *L) { GtLayout **layout; GtError *err; int had_err = 0; unsigned long height; layout = check_layout(L, 1); err = gt_error_new(); had_err = gt_layout_get_height(*layout, &height, err); lua_pushnumber(L, height); if (had_err < 0) return gt_lua_error(L, err); gt_error_delete(err); return 1; }
int GrDrawTarget::VertexCoverageOffset(GrVertexLayout vertexLayout) { GrAssert(check_layout(vertexLayout)); if (vertexLayout & kCoverage_VertexLayoutBit) { int vecSize = (vertexLayout & kTextFormat_VertexLayoutBit) ? sizeof(GrGpuTextVertex) : sizeof(GrPoint); int offset = vecSize * (num_tex_coords(vertexLayout) + 1); if (vertexLayout & kColor_VertexLayoutBit) { offset += sizeof(GrColor); } return offset; } return -1; }
int GrDrawTarget::VertexEdgeOffset(GrVertexLayout vertexLayout) { GrAssert(check_layout(vertexLayout)); // edge pts are after the pos, tex coords, and color if (vertexLayout & kEdge_VertexLayoutBit) { int vecSize = (vertexLayout & kTextFormat_VertexLayoutBit) ? sizeof(GrGpuTextVertex) : sizeof(GrPoint); int offset = vecSize * (num_tex_coords(vertexLayout) + 1); //+1 for pos if (vertexLayout & kColor_VertexLayoutBit) { offset += sizeof(GrColor); } if (vertexLayout & kCoverage_VertexLayoutBit) { offset += sizeof(GrColor); } return offset; } return -1; }
void detect_flash_layout(int show, int first) { int cnt; int chunk, spare, off; memset(buffer, 0xff, sizeof(buffer)); buf_len = safe_read(img_file, buffer, sizeof(buffer)); if (buf_len < 0) prt_err(1, errno, "Read image file"); if (show) printf("Detected flash layout(s):\n"); cnt = 0; for (chunk = MIN_CHUNK_SIZE; chunk <= MAX_CHUNK_SIZE; chunk *= 2) { for (spare = MIN_SPARE_SIZE; spare <= MAX_SPARE_SIZE; spare += 16) { for (off = 0; off <= 2; off += 2) { if (check_layout(chunk, spare, off)) { cnt++; if (show) { printf("%2s -c %-2d -s %-3d : chunk size = %2dK, spare size = %3d, %sbad block info\n", off ? "-b" : "", chunk / 1024, spare, chunk / 1024, spare, off ? "" : "no "); } if (first) { chunk_size = chunk; spare_size = spare; spare_off = off; return; } } } } } if (cnt == 0) { if (show) { printf("-- none --\n"); exit(1); } else { prt_err(1, 0, "Can't determine flash layout, perhaps not a yaffs2 image"); } } }
size_t GrDrawTarget::VertexSize(GrVertexLayout vertexLayout) { GrAssert(check_layout(vertexLayout)); size_t vecSize = (vertexLayout & kTextFormat_VertexLayoutBit) ? sizeof(GrGpuTextVertex) : sizeof(GrPoint); size_t size = vecSize; // position size += num_tex_coords(vertexLayout) * vecSize; if (vertexLayout & kColor_VertexLayoutBit) { size += sizeof(GrColor); } if (vertexLayout & kCoverage_VertexLayoutBit) { size += sizeof(GrColor); } if (vertexLayout & kEdge_VertexLayoutBit) { size += 4 * sizeof(SkScalar); } return size; }
int test_widget_inline_block_layout( void ) { int ret = 0; LCUI_Widget root, pack; LCUI_Init(); TEST_LOG( "test widget inline block layout\n" ); LCUIDisplay_SetSize( SCREEN_WIDTH, SCREEN_HEIGHT ); root = LCUIWidget_GetRoot(); CHECK( pack = LCUIBuilder_LoadFile( "test_widget_inline_block_layout.xml" ) ); if( !pack ) { LCUI_Destroy(); return ret; } Widget_UpdateStyle( root, TRUE ); Widget_Append( root, pack ); Widget_Unwrap( pack ); LCUIWidget_Update(); ret += check_layout(); LCUI_Destroy(); return ret; }
int GrDrawTarget::VertexStageCoordOffset(int stage, GrVertexLayout vertexLayout) { GrAssert(check_layout(vertexLayout)); if (StagePosAsTexCoordVertexLayoutBit(stage) & vertexLayout) { return 0; } int tcIdx = VertexTexCoordsForStage(stage, vertexLayout); if (tcIdx >= 0) { int vecSize = (vertexLayout & kTextFormat_VertexLayoutBit) ? sizeof(GrGpuTextVertex) : sizeof(GrPoint); int offset = vecSize; // position // figure out how many tex coordinates are present and precede this one. for (int t = 0; t < tcIdx; ++t) { if (gTexCoordMasks[t] & vertexLayout) { offset += vecSize; } } return offset; } return -1; }
// ### set-std-instance-layout instance new-layout => new-layout Value SYS_set_std_instance_layout(Value arg1, Value arg2) { check_standard_object(arg1)->set_layout(check_layout(arg2)); return arg2; }
bool GrDrawTarget::VertexUsesStage(int stage, GrVertexLayout vertexLayout) { GrAssert(stage < kNumStages); GrAssert(check_layout(vertexLayout)); return !!(stage_mask(stage) & vertexLayout); }
bool GrDrawTarget::VertexUsesTexCoordIdx(int coordIndex, GrVertexLayout vertexLayout) { GrAssert(coordIndex < kMaxTexCoords); GrAssert(check_layout(vertexLayout)); return !!(tex_coord_idx_mask(coordIndex) & vertexLayout); }
void GrDrawTarget::VertexLayoutUnitTest() { // Ensure that our globals mask arrays are correct GrVertexLayout stageTexCoordMasks[GrDrawState::kNumStages]; GrVertexLayout texCoordMasks[GrDrawState::kMaxTexCoords]; gen_mask_arrays(stageTexCoordMasks, texCoordMasks); for (int s = 0; s < GrDrawState::kNumStages; ++s) { GrAssert(stageTexCoordMasks[s] == gStageTexCoordMasks[s]); } for (int t = 0; t < GrDrawState::kMaxTexCoords; ++t) { GrAssert(texCoordMasks[t] == gTexCoordMasks[t]); } // not necessarily exhaustive static bool run; if (!run) { run = true; for (int s = 0; s < GrDrawState::kNumStages; ++s) { GrVertexLayout stageMask = 0; for (int t = 0; t < GrDrawState::kMaxTexCoords; ++t) { stageMask |= StageTexCoordVertexLayoutBit(s,t); } GrAssert(1 == GrDrawState::kMaxTexCoords || !check_layout(stageMask)); GrAssert(gStageTexCoordMasks[s] == stageMask); GrAssert(!check_layout(stageMask)); } for (int t = 0; t < GrDrawState::kMaxTexCoords; ++t) { GrVertexLayout tcMask = 0; GrAssert(!VertexUsesTexCoordIdx(t, 0)); for (int s = 0; s < GrDrawState::kNumStages; ++s) { tcMask |= StageTexCoordVertexLayoutBit(s,t); GrAssert(sizeof(GrPoint) == VertexStageCoordOffset(s, tcMask)); GrAssert(VertexUsesTexCoordIdx(t, tcMask)); GrAssert(2*sizeof(GrPoint) == VertexSize(tcMask)); GrAssert(t == VertexTexCoordsForStage(s, tcMask)); for (int s2 = s + 1; s2 < GrDrawState::kNumStages; ++s2) { GrAssert(-1 == VertexTexCoordsForStage(s2, tcMask)); #if GR_DEBUG GrVertexLayout posAsTex = tcMask; #endif GrAssert(0 == VertexStageCoordOffset(s2, posAsTex)); GrAssert(2*sizeof(GrPoint) == VertexSize(posAsTex)); GrAssert(-1 == VertexTexCoordsForStage(s2, posAsTex)); GrAssert(-1 == VertexEdgeOffset(posAsTex)); } GrAssert(-1 == VertexEdgeOffset(tcMask)); GrAssert(-1 == VertexColorOffset(tcMask)); GrAssert(-1 == VertexCoverageOffset(tcMask)); #if GR_DEBUG GrVertexLayout withColor = tcMask | kColor_VertexLayoutBit; #endif GrAssert(-1 == VertexCoverageOffset(withColor)); GrAssert(2*sizeof(GrPoint) == VertexColorOffset(withColor)); GrAssert(2*sizeof(GrPoint) + sizeof(GrColor) == VertexSize(withColor)); #if GR_DEBUG GrVertexLayout withEdge = tcMask | kEdge_VertexLayoutBit; #endif GrAssert(-1 == VertexColorOffset(withEdge)); GrAssert(2*sizeof(GrPoint) == VertexEdgeOffset(withEdge)); GrAssert(4*sizeof(GrPoint) == VertexSize(withEdge)); #if GR_DEBUG GrVertexLayout withColorAndEdge = withColor | kEdge_VertexLayoutBit; #endif GrAssert(2*sizeof(GrPoint) == VertexColorOffset(withColorAndEdge)); GrAssert(2*sizeof(GrPoint) + sizeof(GrColor) == VertexEdgeOffset(withColorAndEdge)); GrAssert(4*sizeof(GrPoint) + sizeof(GrColor) == VertexSize(withColorAndEdge)); #if GR_DEBUG GrVertexLayout withCoverage = tcMask | kCoverage_VertexLayoutBit; #endif GrAssert(-1 == VertexColorOffset(withCoverage)); GrAssert(2*sizeof(GrPoint) == VertexCoverageOffset(withCoverage)); GrAssert(2*sizeof(GrPoint) + sizeof(GrColor) == VertexSize(withCoverage)); #if GR_DEBUG GrVertexLayout withCoverageAndColor = tcMask | kCoverage_VertexLayoutBit | kColor_VertexLayoutBit; #endif GrAssert(2*sizeof(GrPoint) == VertexColorOffset(withCoverageAndColor)); GrAssert(2*sizeof(GrPoint) + sizeof(GrColor) == VertexCoverageOffset(withCoverageAndColor)); GrAssert(2*sizeof(GrPoint) + 2 * sizeof(GrColor) == VertexSize(withCoverageAndColor)); } GrAssert(gTexCoordMasks[t] == tcMask); GrAssert(check_layout(tcMask)); int stageOffsets[GrDrawState::kNumStages]; int colorOffset; int edgeOffset; int coverageOffset; int size; size = VertexSizeAndOffsetsByStage(tcMask, stageOffsets, &colorOffset, &coverageOffset, &edgeOffset); GrAssert(2*sizeof(GrPoint) == size); GrAssert(-1 == colorOffset); GrAssert(-1 == coverageOffset); GrAssert(-1 == edgeOffset); for (int s = 0; s < GrDrawState::kNumStages; ++s) { GrAssert(sizeof(GrPoint) == stageOffsets[s]); GrAssert(sizeof(GrPoint) == VertexStageCoordOffset(s, tcMask)); } } } }
void GrDrawTarget::VertexLayoutUnitTest() { // not necessarily exhaustive static bool run; if (!run) { run = true; for (int s = 0; s < kNumStages; ++s) { GrAssert(!VertexUsesStage(s, 0)); GrAssert(-1 == VertexStageCoordOffset(s, 0)); GrVertexLayout stageMask = 0; for (int t = 0; t < kMaxTexCoords; ++t) { stageMask |= StageTexCoordVertexLayoutBit(s,t); } GrAssert(1 == kMaxTexCoords || !check_layout(stageMask)); GrAssert(stage_tex_coord_mask(s) == stageMask); stageMask |= StagePosAsTexCoordVertexLayoutBit(s); GrAssert(stage_mask(s) == stageMask); GrAssert(!check_layout(stageMask)); } for (int t = 0; t < kMaxTexCoords; ++t) { GrVertexLayout tcMask = 0; GrAssert(!VertexUsesTexCoordIdx(t, 0)); for (int s = 0; s < kNumStages; ++s) { tcMask |= StageTexCoordVertexLayoutBit(s,t); GrAssert(VertexUsesStage(s, tcMask)); GrAssert(sizeof(GrPoint) == VertexStageCoordOffset(s, tcMask)); GrAssert(VertexUsesTexCoordIdx(t, tcMask)); GrAssert(2*sizeof(GrPoint) == VertexSize(tcMask)); GrAssert(t == VertexTexCoordsForStage(s, tcMask)); for (int s2 = s + 1; s2 < kNumStages; ++s2) { GrAssert(-1 == VertexStageCoordOffset(s2, tcMask)); GrAssert(!VertexUsesStage(s2, tcMask)); GrAssert(-1 == VertexTexCoordsForStage(s2, tcMask)); #if GR_DEBUG GrVertexLayout posAsTex = tcMask | StagePosAsTexCoordVertexLayoutBit(s2); #endif GrAssert(0 == VertexStageCoordOffset(s2, posAsTex)); GrAssert(VertexUsesStage(s2, posAsTex)); GrAssert(2*sizeof(GrPoint) == VertexSize(posAsTex)); GrAssert(-1 == VertexTexCoordsForStage(s2, posAsTex)); GrAssert(-1 == VertexEdgeOffset(posAsTex)); } GrAssert(-1 == VertexEdgeOffset(tcMask)); GrAssert(-1 == VertexColorOffset(tcMask)); GrAssert(-1 == VertexCoverageOffset(tcMask)); #if GR_DEBUG GrVertexLayout withColor = tcMask | kColor_VertexLayoutBit; #endif GrAssert(-1 == VertexCoverageOffset(withColor)); GrAssert(2*sizeof(GrPoint) == VertexColorOffset(withColor)); GrAssert(2*sizeof(GrPoint) + sizeof(GrColor) == VertexSize(withColor)); #if GR_DEBUG GrVertexLayout withEdge = tcMask | kEdge_VertexLayoutBit; #endif GrAssert(-1 == VertexColorOffset(withEdge)); GrAssert(2*sizeof(GrPoint) == VertexEdgeOffset(withEdge)); GrAssert(4*sizeof(GrPoint) == VertexSize(withEdge)); #if GR_DEBUG GrVertexLayout withColorAndEdge = withColor | kEdge_VertexLayoutBit; #endif GrAssert(2*sizeof(GrPoint) == VertexColorOffset(withColorAndEdge)); GrAssert(2*sizeof(GrPoint) + sizeof(GrColor) == VertexEdgeOffset(withColorAndEdge)); GrAssert(4*sizeof(GrPoint) + sizeof(GrColor) == VertexSize(withColorAndEdge)); #if GR_DEBUG GrVertexLayout withCoverage = tcMask | kCoverage_VertexLayoutBit; #endif GrAssert(-1 == VertexColorOffset(withCoverage)); GrAssert(2*sizeof(GrPoint) == VertexCoverageOffset(withCoverage)); GrAssert(2*sizeof(GrPoint) + sizeof(GrColor) == VertexSize(withCoverage)); #if GR_DEBUG GrVertexLayout withCoverageAndColor = tcMask | kCoverage_VertexLayoutBit | kColor_VertexLayoutBit; #endif GrAssert(2*sizeof(GrPoint) == VertexColorOffset(withCoverageAndColor)); GrAssert(2*sizeof(GrPoint) + sizeof(GrColor) == VertexCoverageOffset(withCoverageAndColor)); GrAssert(2*sizeof(GrPoint) + 2 * sizeof(GrColor) == VertexSize(withCoverageAndColor)); } GrAssert(tex_coord_idx_mask(t) == tcMask); GrAssert(check_layout(tcMask)); int stageOffsets[kNumStages]; int colorOffset; int edgeOffset; int coverageOffset; int size; size = VertexSizeAndOffsetsByStage(tcMask, stageOffsets, &colorOffset, &coverageOffset, &edgeOffset); GrAssert(2*sizeof(GrPoint) == size); GrAssert(-1 == colorOffset); GrAssert(-1 == coverageOffset); GrAssert(-1 == edgeOffset); for (int s = 0; s < kNumStages; ++s) { GrAssert(VertexUsesStage(s, tcMask)); GrAssert(sizeof(GrPoint) == stageOffsets[s]); GrAssert(sizeof(GrPoint) == VertexStageCoordOffset(s, tcMask)); } } } }
bool GrDrawTarget::VertexUsesTexCoordIdx(int coordIndex, GrVertexLayout vertexLayout) { GrAssert(coordIndex < GrDrawState::kMaxTexCoords); GrAssert(check_layout(vertexLayout)); return !!(gTexCoordMasks[coordIndex] & vertexLayout); }
bool GrDrawTarget::VertexUsesStage(int stage, GrVertexLayout vertexLayout) { GrAssert(stage < GrDrawState::kNumStages); GrAssert(check_layout(vertexLayout)); return !!(gStageMasks[stage] & vertexLayout); }