RSS

(root)/iphone/common : 23 : Jigs/source/JigView.m

To get this branch, use:
bzr branch /browse/iphone/common

« back to all changes in this revision

Viewing changes to Jigs/source/JigView.m

Dömötör Gulyás
2009-08-09 18:33:08
Revision ID: dognotdog@gmail.com-20090809163308-k92rpn48plb13cqe
adds ability to create textures from PDF; adds color value to shaders; jigs now displays movement mode

Show diffs side-by-side

added added

removed removed

67
67
*/
68
68
}
69
69
 
70
 
 
71
 
- (void) setupGraphicsForApi: (EAGLRenderingAPI) glApi
 
70
- (void) generateJigsaw
72
71
{
73
 
        glClearColor(0.0,0.0,1.0,1.0);
74
 
        
75
 
        CGImageRef image = [UIImage imageNamed: @"coding1.jpg"].CGImage;
76
 
        //CGImageRef image = [UIImage imageNamed: @"white.png"].CGImage;
77
 
 
78
 
        [self textureFromCgImage:image texName: &imageTexture width: 512 height: 512 repeat: NO mipmap: YES filter: YES];
79
 
        [self lineGradientTexture: &blackGradientTexture red: 0.0f green: 0.0f blue: 0.0f];
80
 
        [self lineGradientTexture: &whiteGradientTexture red: 1.0f green: 1.0f blue: 1.0f];
81
 
        
82
 
        if ([[EAGLContext currentContext] API] == kEAGLRenderingAPIOpenGLES2)
83
 
        {
84
 
                jigsawShader = [[[ESShader shader] initWithVertexShaderFile: @"jigsawPiece.vs" fragmentShaderFile: @"jigsawPiece.fs"] retain];
85
 
        }
86
 
        else
87
 
        {
88
 
                jigsawShader = [[[ESShader shader] init] retain];
89
 
        }
90
 
        
91
72
        int hcells = 3;
92
73
        int vcells = 4;
93
74
        float jigWidth = 300.0f;
308
289
        FreeJigPieces(pieces);
309
290
}
310
291
 
 
292
- (void) setupGraphicsForApi: (EAGLRenderingAPI) glApi
 
293
{
 
294
        glClearColor(0.0,0.0,1.0,1.0);
 
295
        
 
296
        CGImageRef image = [UIImage imageNamed: @"coding1.jpg"].CGImage;
 
297
        //CGImageRef image = [UIImage imageNamed: @"white.png"].CGImage;
 
298
 
 
299
        [self textureFromCgImage:image texName: &imageTexture width: 512 height: 512 repeat: NO mipmap: YES filter: YES];
 
300
        [self lineGradientTexture: &blackGradientTexture red: 0.0f green: 0.0f blue: 0.0f];
 
301
        [self lineGradientTexture: &whiteGradientTexture red: 1.0f green: 1.0f blue: 1.0f];
 
302
        
 
303
        [self loadTextureFromPDFNamed: @"move-icon.pdf" texName: &moveIconTexture width: 32 height: 32 repeat: NO mipmap: NO filter: NO];
 
304
 
 
305
        if ([[EAGLContext currentContext] API] == kEAGLRenderingAPIOpenGLES2)
 
306
        {
 
307
                jigsawShader = [[[ESShader shader] initWithVertexShaderFile: @"jigsawPiece.vs" fragmentShaderFile: @"jigsawPiece.fs"] retain];
 
308
        }
 
309
        else
 
310
        {
 
311
                jigsawShader = [[[ESShader shader] init] retain];
 
312
        }
 
313
        
 
314
        [self generateJigsaw];
 
315
        
 
316
}
 
317
 
311
318
static inline CGPoint cpvToCGPoint(cpVect p)
312
319
{
313
320
        return CGPointMake(p.x, p.y);
372
379
                        CGPoint d = CGPointSub([snappedPiece initialPos], [piece0 initialPos]);
373
380
                        CGAffineTransform       T = CGAffineTransformMakeTranslation(d.x, d.y);
374
381
                        m16                                     TM = mtranslate(vcreate(d.x, d.y, 0.0));
 
382
 
375
383
                        for (VertexArray* var in [snappedPiece fillDrawables])
376
384
                                [var applyVertexTransform: TM];
377
385
                        for (VertexArray* var in [snappedPiece outlineDrawables])
445
453
        
446
454
        [jigsawShader bindShader];
447
455
        
 
456
        [jigsawShader setColorRed: 1.0f green: 1.0f blue: 1.0f alpha: 1.0f];
 
457
        
448
458
        [jigsawShader setTextureMatrix: &I];
449
459
        [jigsawShader setProjectionMatrix: &I];
450
460
        [jigsawShader setModelviewMatrix: &I];
482
492
                        [var draw];
483
493
        }
484
494
 
 
495
        piecesChangedSinceLastRedraw = NO;
 
496
        
 
497
        if (selectedPiece && initialTouch)
 
498
        {
 
499
                m16 quadS = mscale(vcreate(16.0,16.0,1.0));
 
500
                m16 quadT = mtranslate(vcreate(CGRectGetMaxX(bounds)-16.0, CGRectGetMaxY(bounds)-16.0, 0.0));
 
501
                
 
502
                m16 quadM = mmul(quadT, quadS);
 
503
                
 
504
                [jigsawShader setTextureMatrix: &I];
 
505
                [jigsawShader setColorRed: 0.5f green: 0.5f blue: 0.5f alpha: 0.5f];
 
506
                glBlendFunc(GL_ONE, GL_ONE);
 
507
                
 
508
                [jigsawShader setModelviewMatrix: &quadM];
 
509
                glBindTexture(GL_TEXTURE_2D, moveIconTexture);
 
510
                [[VertexArray sharedQuad] draw];
 
511
 
 
512
                quadM = mmul(quadT, quadM);
 
513
                [jigsawShader setModelviewMatrix: &quadM];
 
514
                glBindTexture(GL_TEXTURE_2D, rotateIconTexture);
 
515
                [[VertexArray sharedQuad] draw];
 
516
        }
485
517
        
486
518
        [self finishViewDrawing];
487
519
}
499
531
                {
500
532
                        float touchy = oneTouchRotationAccumulator > 0 ? oneTouchRotationAccumulator - 100.0 : oneTouchRotationAccumulator + 100.0;
501
533
                        [selectedPiece rotateByAngle: touchy*0.0001 aroundPoint: oneTouchRotationCenter];
 
534
                        [self piecesChanged];
502
535
                }
503
536
        }
504
 
        [self drawView];
 
537
        if (piecesChangedSinceLastRedraw)
 
538
                [self drawView];
505
539
}
506
540
 
507
541
- (void) secondaryTouch: (UITouch*) touch 
534
568
        
535
569
        selectedPiece = nil;
536
570
        
 
571
        [self piecesChanged];
537
572
        int i = 0;
538
573
        
539
574
        for (JigsawPiece* piece in jigsawPieces)
549
584
                for (id _outline in [piece outlines])
550
585
                {
551
586
                        CGPathRef outline = (CGPathRef)_outline;
552
 
                        
553
 
        //              CGRect ob = CGPathGetBoundingBox(outline);
554
587
 
555
 
        //              NSLog(@"outline bounds (%.1f, %.1f), (%.1f, %.1f)", ob.origin.x, ob.origin.y, ob.size.width, ob.size.height);
556
 
        //              NSLog(@"p %.1f %.1f", lp.x, lp.y);
557
 
                
558
588
                        if (CGPathContainsPoint(outline, NULL, lp, NO))
559
589
                        {
560
590
                                selectedPiece = piece;
635
665
                        rotationTouchLastVector = rv;
636
666
                }
637
667
        }
 
668
 
 
669
        [self piecesChanged];
638
670
        
639
671
}
640
672
 
654
686
                                [self snapPieceIfRequired: selectedPiece];
655
687
 
656
688
                        selectedPiece = nil;    
 
689
                        [self piecesChanged];
657
690
                }
658
691
                else if ([touches containsObject: secondaryTouch])
659
692
                {
684
717
                        secondaryTouch = nil;
685
718
                }
686
719
        }
 
720
        [self piecesChanged];
 
721
}
 
722
 
 
723
- (void) piecesChanged
 
724
{
 
725
        piecesChangedSinceLastRedraw = YES;
687
726
}
688
727
 
689
728
- (void)dealloc

Loggerhead 1.17 is a web-based interface for Bazaar branches