OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2009, Google Inc. | 2 * Copyright 2009, Google Inc. |
3 * All rights reserved. | 3 * All rights reserved. |
4 * | 4 * |
5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
6 * modification, are permitted provided that the following conditions are | 6 * modification, are permitted provided that the following conditions are |
7 * met: | 7 * met: |
8 * | 8 * |
9 * * Redistributions of source code must retain the above copyright | 9 * * Redistributions of source code must retain the above copyright |
10 * notice, this list of conditions and the following disclaimer. | 10 * notice, this list of conditions and the following disclaimer. |
(...skipping 293 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
304 } | 304 } |
305 dirty_ = false; | 305 dirty_ = false; |
306 } | 306 } |
307 | 307 |
308 BufferSyncInterface::ParseError GAPIGL::CreateVertexBuffer(ResourceID id, | 308 BufferSyncInterface::ParseError GAPIGL::CreateVertexBuffer(ResourceID id, |
309 unsigned int size, | 309 unsigned int size, |
310 unsigned int flags) { | 310 unsigned int flags) { |
311 VertexBufferGL *vertex_buffer = new VertexBufferGL(size, flags); | 311 VertexBufferGL *vertex_buffer = new VertexBufferGL(size, flags); |
312 vertex_buffer->Create(); | 312 vertex_buffer->Create(); |
313 vertex_buffers_.Assign(id, vertex_buffer); | 313 vertex_buffers_.Assign(id, vertex_buffer); |
314 return BufferSyncInterface::PARSE_NO_ERROR; | 314 return BufferSyncInterface::kParseNoError; |
315 } | 315 } |
316 | 316 |
317 BufferSyncInterface::ParseError GAPIGL::DestroyVertexBuffer(ResourceID id) { | 317 BufferSyncInterface::ParseError GAPIGL::DestroyVertexBuffer(ResourceID id) { |
318 return vertex_buffers_.Destroy(id) ? | 318 return vertex_buffers_.Destroy(id) ? |
319 BufferSyncInterface::PARSE_NO_ERROR : | 319 BufferSyncInterface::kParseNoError : |
320 BufferSyncInterface::PARSE_INVALID_ARGUMENTS; | 320 BufferSyncInterface::kParseInvalidArguments; |
321 } | 321 } |
322 | 322 |
323 BufferSyncInterface::ParseError GAPIGL::SetVertexBufferData(ResourceID id, | 323 BufferSyncInterface::ParseError GAPIGL::SetVertexBufferData(ResourceID id, |
324 unsigned int offset, | 324 unsigned int offset, |
325 unsigned int size, | 325 unsigned int size, |
326 const void *data) { | 326 const void *data) { |
327 VertexBufferGL *vertex_buffer = vertex_buffers_.Get(id); | 327 VertexBufferGL *vertex_buffer = vertex_buffers_.Get(id); |
328 if (!vertex_buffer) return BufferSyncInterface::PARSE_INVALID_ARGUMENTS; | 328 if (!vertex_buffer) return BufferSyncInterface::kParseInvalidArguments; |
329 return vertex_buffer->SetData(offset, size, data) ? | 329 return vertex_buffer->SetData(offset, size, data) ? |
330 BufferSyncInterface::PARSE_NO_ERROR : | 330 BufferSyncInterface::kParseNoError : |
331 BufferSyncInterface::PARSE_INVALID_ARGUMENTS; | 331 BufferSyncInterface::kParseInvalidArguments; |
332 } | 332 } |
333 | 333 |
334 BufferSyncInterface::ParseError GAPIGL::GetVertexBufferData(ResourceID id, | 334 BufferSyncInterface::ParseError GAPIGL::GetVertexBufferData(ResourceID id, |
335 unsigned int offset, | 335 unsigned int offset, |
336 unsigned int size, | 336 unsigned int size, |
337 void *data) { | 337 void *data) { |
338 VertexBufferGL *vertex_buffer = vertex_buffers_.Get(id); | 338 VertexBufferGL *vertex_buffer = vertex_buffers_.Get(id); |
339 if (!vertex_buffer) return BufferSyncInterface::PARSE_INVALID_ARGUMENTS; | 339 if (!vertex_buffer) return BufferSyncInterface::kParseInvalidArguments; |
340 return vertex_buffer->GetData(offset, size, data) ? | 340 return vertex_buffer->GetData(offset, size, data) ? |
341 BufferSyncInterface::PARSE_NO_ERROR : | 341 BufferSyncInterface::kParseNoError : |
342 BufferSyncInterface::PARSE_INVALID_ARGUMENTS; | 342 BufferSyncInterface::kParseInvalidArguments; |
343 } | 343 } |
344 | 344 |
345 BufferSyncInterface::ParseError GAPIGL::CreateIndexBuffer(ResourceID id, | 345 BufferSyncInterface::ParseError GAPIGL::CreateIndexBuffer(ResourceID id, |
346 unsigned int size, | 346 unsigned int size, |
347 unsigned int flags) { | 347 unsigned int flags) { |
348 IndexBufferGL *index_buffer = new IndexBufferGL(size, flags); | 348 IndexBufferGL *index_buffer = new IndexBufferGL(size, flags); |
349 index_buffer->Create(); | 349 index_buffer->Create(); |
350 index_buffers_.Assign(id, index_buffer); | 350 index_buffers_.Assign(id, index_buffer); |
351 return BufferSyncInterface::PARSE_NO_ERROR; | 351 return BufferSyncInterface::kParseNoError; |
352 } | 352 } |
353 | 353 |
354 BufferSyncInterface::ParseError GAPIGL::DestroyIndexBuffer(ResourceID id) { | 354 BufferSyncInterface::ParseError GAPIGL::DestroyIndexBuffer(ResourceID id) { |
355 return index_buffers_.Destroy(id) ? | 355 return index_buffers_.Destroy(id) ? |
356 BufferSyncInterface::PARSE_NO_ERROR : | 356 BufferSyncInterface::kParseNoError : |
357 BufferSyncInterface::PARSE_INVALID_ARGUMENTS; | 357 BufferSyncInterface::kParseInvalidArguments; |
358 } | 358 } |
359 | 359 |
360 BufferSyncInterface::ParseError GAPIGL::SetIndexBufferData(ResourceID id, | 360 BufferSyncInterface::ParseError GAPIGL::SetIndexBufferData(ResourceID id, |
361 unsigned int offset, | 361 unsigned int offset, |
362 unsigned int size, | 362 unsigned int size, |
363 const void *data) { | 363 const void *data) { |
364 IndexBufferGL *index_buffer = index_buffers_.Get(id); | 364 IndexBufferGL *index_buffer = index_buffers_.Get(id); |
365 if (!index_buffer) return BufferSyncInterface::PARSE_INVALID_ARGUMENTS; | 365 if (!index_buffer) return BufferSyncInterface::kParseInvalidArguments; |
366 return index_buffer->SetData(offset, size, data) ? | 366 return index_buffer->SetData(offset, size, data) ? |
367 BufferSyncInterface::PARSE_NO_ERROR : | 367 BufferSyncInterface::kParseNoError : |
368 BufferSyncInterface::PARSE_INVALID_ARGUMENTS; | 368 BufferSyncInterface::kParseInvalidArguments; |
369 } | 369 } |
370 | 370 |
371 BufferSyncInterface::ParseError GAPIGL::GetIndexBufferData(ResourceID id, | 371 BufferSyncInterface::ParseError GAPIGL::GetIndexBufferData(ResourceID id, |
372 unsigned int offset, | 372 unsigned int offset, |
373 unsigned int size, | 373 unsigned int size, |
374 void *data) { | 374 void *data) { |
375 IndexBufferGL *index_buffer = index_buffers_.Get(id); | 375 IndexBufferGL *index_buffer = index_buffers_.Get(id); |
376 if (!index_buffer) return BufferSyncInterface::PARSE_INVALID_ARGUMENTS; | 376 if (!index_buffer) return BufferSyncInterface::kParseInvalidArguments; |
377 return index_buffer->GetData(offset, size, data) ? | 377 return index_buffer->GetData(offset, size, data) ? |
378 BufferSyncInterface::PARSE_NO_ERROR : | 378 BufferSyncInterface::kParseNoError : |
379 BufferSyncInterface::PARSE_INVALID_ARGUMENTS; | 379 BufferSyncInterface::kParseInvalidArguments; |
380 } | 380 } |
381 | 381 |
382 BufferSyncInterface::ParseError GAPIGL::CreateVertexStruct( | 382 BufferSyncInterface::ParseError GAPIGL::CreateVertexStruct( |
383 ResourceID id, | 383 ResourceID id, |
384 unsigned int input_count) { | 384 unsigned int input_count) { |
385 if (id == current_vertex_struct_) validate_streams_ = true; | 385 if (id == current_vertex_struct_) validate_streams_ = true; |
386 VertexStructGL *vertex_struct = new VertexStructGL(input_count); | 386 VertexStructGL *vertex_struct = new VertexStructGL(input_count); |
387 vertex_structs_.Assign(id, vertex_struct); | 387 vertex_structs_.Assign(id, vertex_struct); |
388 return BufferSyncInterface::PARSE_NO_ERROR; | 388 return BufferSyncInterface::kParseNoError; |
389 } | 389 } |
390 | 390 |
391 BufferSyncInterface::ParseError GAPIGL::DestroyVertexStruct(ResourceID id) { | 391 BufferSyncInterface::ParseError GAPIGL::DestroyVertexStruct(ResourceID id) { |
392 if (id == current_vertex_struct_) validate_streams_ = true; | 392 if (id == current_vertex_struct_) validate_streams_ = true; |
393 return vertex_structs_.Destroy(id) ? | 393 return vertex_structs_.Destroy(id) ? |
394 BufferSyncInterface::PARSE_NO_ERROR : | 394 BufferSyncInterface::kParseNoError : |
395 BufferSyncInterface::PARSE_INVALID_ARGUMENTS; | 395 BufferSyncInterface::kParseInvalidArguments; |
396 } | 396 } |
397 | 397 |
398 BufferSyncInterface::ParseError GAPIGL::SetVertexInput( | 398 BufferSyncInterface::ParseError GAPIGL::SetVertexInput( |
399 ResourceID vertex_struct_id, | 399 ResourceID vertex_struct_id, |
400 unsigned int input_index, | 400 unsigned int input_index, |
401 ResourceID vertex_buffer_id, | 401 ResourceID vertex_buffer_id, |
402 unsigned int offset, | 402 unsigned int offset, |
403 unsigned int stride, | 403 unsigned int stride, |
404 vertex_struct::Type type, | 404 vertex_struct::Type type, |
405 vertex_struct::Semantic semantic, | 405 vertex_struct::Semantic semantic, |
406 unsigned int semantic_index) { | 406 unsigned int semantic_index) { |
407 switch (semantic) { | 407 switch (semantic) { |
408 case vertex_struct::POSITION: | 408 case vertex_struct::POSITION: |
409 if (semantic_index != 0) { | 409 if (semantic_index != 0) { |
410 return BufferSyncInterface::PARSE_INVALID_ARGUMENTS; | 410 return BufferSyncInterface::kParseInvalidArguments; |
411 } | 411 } |
412 break; | 412 break; |
413 case vertex_struct::NORMAL: | 413 case vertex_struct::NORMAL: |
414 if (semantic_index != 0) { | 414 if (semantic_index != 0) { |
415 return BufferSyncInterface::PARSE_INVALID_ARGUMENTS; | 415 return BufferSyncInterface::kParseInvalidArguments; |
416 } | 416 } |
417 break; | 417 break; |
418 case vertex_struct::COLOR: | 418 case vertex_struct::COLOR: |
419 if (semantic_index >= 2) { | 419 if (semantic_index >= 2) { |
420 return BufferSyncInterface::PARSE_INVALID_ARGUMENTS; | 420 return BufferSyncInterface::kParseInvalidArguments; |
421 } | 421 } |
422 break; | 422 break; |
423 case vertex_struct::TEX_COORD: | 423 case vertex_struct::TEX_COORD: |
424 if (semantic_index >= 8) { | 424 if (semantic_index >= 8) { |
425 return BufferSyncInterface::PARSE_INVALID_ARGUMENTS; | 425 return BufferSyncInterface::kParseInvalidArguments; |
426 } | 426 } |
427 break; | 427 break; |
428 default: | 428 default: |
429 DLOG(FATAL) << "Not reached."; | 429 DLOG(FATAL) << "Not reached."; |
430 break; | 430 break; |
431 } | 431 } |
432 if (vertex_buffer_id == current_vertex_struct_) validate_streams_ = true; | 432 if (vertex_buffer_id == current_vertex_struct_) validate_streams_ = true; |
433 VertexStructGL *vertex_struct = vertex_structs_.Get(vertex_struct_id); | 433 VertexStructGL *vertex_struct = vertex_structs_.Get(vertex_struct_id); |
434 if (!vertex_struct || input_index >= vertex_struct->count()) | 434 if (!vertex_struct || input_index >= vertex_struct->count()) |
435 return BufferSyncInterface::PARSE_INVALID_ARGUMENTS; | 435 return BufferSyncInterface::kParseInvalidArguments; |
436 vertex_struct->SetInput(input_index, vertex_buffer_id, offset, stride, type, | 436 vertex_struct->SetInput(input_index, vertex_buffer_id, offset, stride, type, |
437 semantic, semantic_index); | 437 semantic, semantic_index); |
438 return BufferSyncInterface::PARSE_NO_ERROR; | 438 return BufferSyncInterface::kParseNoError; |
439 } | 439 } |
440 | 440 |
441 BufferSyncInterface::ParseError GAPIGL::SetVertexStruct(ResourceID id) { | 441 BufferSyncInterface::ParseError GAPIGL::SetVertexStruct(ResourceID id) { |
442 current_vertex_struct_ = id; | 442 current_vertex_struct_ = id; |
443 validate_streams_ = true; | 443 validate_streams_ = true; |
444 return BufferSyncInterface::PARSE_NO_ERROR; | 444 return BufferSyncInterface::kParseNoError; |
445 } | 445 } |
446 | 446 |
447 bool GAPIGL::ValidateStreams() { | 447 bool GAPIGL::ValidateStreams() { |
448 DCHECK(validate_streams_); | 448 DCHECK(validate_streams_); |
449 VertexStructGL *vertex_struct = vertex_structs_.Get(current_vertex_struct_); | 449 VertexStructGL *vertex_struct = vertex_structs_.Get(current_vertex_struct_); |
450 if (!vertex_struct) { | 450 if (!vertex_struct) { |
451 LOG(ERROR) << "Drawing with invalid streams."; | 451 LOG(ERROR) << "Drawing with invalid streams."; |
452 return false; | 452 return false; |
453 } | 453 } |
454 max_vertices_ = vertex_struct->SetStreams(this); | 454 max_vertices_ = vertex_struct->SetStreams(this); |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
490 break; | 490 break; |
491 } | 491 } |
492 } | 492 } |
493 | 493 |
494 } // anonymous namespace | 494 } // anonymous namespace |
495 | 495 |
496 BufferSyncInterface::ParseError GAPIGL::Draw(PrimitiveType primitive_type, | 496 BufferSyncInterface::ParseError GAPIGL::Draw(PrimitiveType primitive_type, |
497 unsigned int first, | 497 unsigned int first, |
498 unsigned int count) { | 498 unsigned int count) { |
499 if (validate_effect_ && !ValidateEffect()) { | 499 if (validate_effect_ && !ValidateEffect()) { |
500 return BufferSyncInterface::PARSE_INVALID_ARGUMENTS; | 500 return BufferSyncInterface::kParseInvalidArguments; |
501 } | 501 } |
502 DCHECK(current_effect_); | 502 DCHECK(current_effect_); |
503 if (validate_streams_ && !ValidateStreams()) { | 503 if (validate_streams_ && !ValidateStreams()) { |
504 return BufferSyncInterface::PARSE_INVALID_ARGUMENTS; | 504 return BufferSyncInterface::kParseInvalidArguments; |
505 } | 505 } |
506 GLenum gl_mode = GL_POINTS; | 506 GLenum gl_mode = GL_POINTS; |
507 PrimitiveTypeToGL(primitive_type, &gl_mode, &count); | 507 PrimitiveTypeToGL(primitive_type, &gl_mode, &count); |
508 if (first + count > max_vertices_) { | 508 if (first + count > max_vertices_) { |
509 return BufferSyncInterface::PARSE_INVALID_ARGUMENTS; | 509 return BufferSyncInterface::kParseInvalidArguments; |
510 } | 510 } |
511 glDrawArrays(gl_mode, first, count); | 511 glDrawArrays(gl_mode, first, count); |
512 CHECK_GL_ERROR(); | 512 CHECK_GL_ERROR(); |
513 return BufferSyncInterface::PARSE_NO_ERROR; | 513 return BufferSyncInterface::kParseNoError; |
514 } | 514 } |
515 | 515 |
516 BufferSyncInterface::ParseError GAPIGL::DrawIndexed( | 516 BufferSyncInterface::ParseError GAPIGL::DrawIndexed( |
517 PrimitiveType primitive_type, | 517 PrimitiveType primitive_type, |
518 ResourceID index_buffer_id, | 518 ResourceID index_buffer_id, |
519 unsigned int first, | 519 unsigned int first, |
520 unsigned int count, | 520 unsigned int count, |
521 unsigned int min_index, | 521 unsigned int min_index, |
522 unsigned int max_index) { | 522 unsigned int max_index) { |
523 IndexBufferGL *index_buffer = index_buffers_.Get(index_buffer_id); | 523 IndexBufferGL *index_buffer = index_buffers_.Get(index_buffer_id); |
524 if (!index_buffer) return BufferSyncInterface::PARSE_INVALID_ARGUMENTS; | 524 if (!index_buffer) return BufferSyncInterface::kParseInvalidArguments; |
525 if (validate_effect_ && !ValidateEffect()) { | 525 if (validate_effect_ && !ValidateEffect()) { |
526 return BufferSyncInterface::PARSE_INVALID_ARGUMENTS; | 526 return BufferSyncInterface::kParseInvalidArguments; |
527 } | 527 } |
528 DCHECK(current_effect_); | 528 DCHECK(current_effect_); |
529 if (validate_streams_ && !ValidateStreams()) { | 529 if (validate_streams_ && !ValidateStreams()) { |
530 return BufferSyncInterface::PARSE_INVALID_ARGUMENTS; | 530 return BufferSyncInterface::kParseInvalidArguments; |
531 } | 531 } |
532 if ((min_index >= max_vertices_) || (max_index > max_vertices_)) { | 532 if ((min_index >= max_vertices_) || (max_index > max_vertices_)) { |
533 return BufferSyncInterface::PARSE_INVALID_ARGUMENTS; | 533 return BufferSyncInterface::kParseInvalidArguments; |
534 } | 534 } |
535 GLenum gl_mode = GL_POINTS; | 535 GLenum gl_mode = GL_POINTS; |
536 PrimitiveTypeToGL(primitive_type, &gl_mode, &count); | 536 PrimitiveTypeToGL(primitive_type, &gl_mode, &count); |
537 glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, index_buffer->gl_buffer()); | 537 glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, index_buffer->gl_buffer()); |
538 GLenum index_type = (index_buffer->flags() & index_buffer::INDEX_32BIT) ? | 538 GLenum index_type = (index_buffer->flags() & index_buffer::INDEX_32BIT) ? |
539 GL_UNSIGNED_INT : GL_UNSIGNED_SHORT; | 539 GL_UNSIGNED_INT : GL_UNSIGNED_SHORT; |
540 GLuint index_size = (index_buffer->flags() & index_buffer::INDEX_32BIT) ? | 540 GLuint index_size = (index_buffer->flags() & index_buffer::INDEX_32BIT) ? |
541 sizeof(GLuint) : sizeof(GLushort); // NOLINT | 541 sizeof(GLuint) : sizeof(GLushort); // NOLINT |
542 GLuint offset = first * index_size; | 542 GLuint offset = first * index_size; |
543 if (offset + count * index_size > index_buffer->size()) { | 543 if (offset + count * index_size > index_buffer->size()) { |
544 return BufferSyncInterface::PARSE_INVALID_ARGUMENTS; | 544 return BufferSyncInterface::kParseInvalidArguments; |
545 } | 545 } |
546 glDrawRangeElements(gl_mode, min_index, max_index, count, index_type, | 546 glDrawRangeElements(gl_mode, min_index, max_index, count, index_type, |
547 OffsetToPtr(offset)); | 547 OffsetToPtr(offset)); |
548 CHECK_GL_ERROR(); | 548 CHECK_GL_ERROR(); |
549 return BufferSyncInterface::PARSE_NO_ERROR; | 549 return BufferSyncInterface::kParseNoError; |
550 } | 550 } |
551 | 551 |
552 } // namespace command_buffer | 552 } // namespace command_buffer |
553 } // namespace o3d | 553 } // namespace o3d |
OLD | NEW |